お世話になります
環境はWinXP Pro VC++6.0 です
MFCウイザードでダイアログベースのデフォルトのスケルトンをつくり
OKボタンに下記ソースを実装しました
void CTestDlg::OnOK()
{
CString ss;
ss = ab北海道;
AfxMessageBox(ss); //1
ss.TrimLeft(ab);
AfxMessageBox(ss); //2
ss = 青北海道;
AfxMessageBox(ss); //3
ss.TrimLeft(青);
AfxMessageBox(ss); //4
CDialog::OnOK();
}
上記4箇所の表示では それぞれ
ab北海道
北海道
青北海道
青北海道
でした //4のところでは
北海道
と表示されるとおもったのですが 青北海道 でした
青北海道
をTrimLeftして 北海道 としたいときには どうすればよろしいのでしょうか
過去とのしがらみでいまだに VC++6.0 使っていますが
よろしくおねがいします
TrimLeftをみてみたところ、内部では_tcschrを呼び出しているようでした。
マルチバイト文字セットを使う場合は_mbschrに置き換わるのですが、
そこで、_mbschrの第二引数に指定する文字列が、マルチバイト文字であろうが最初の1
バイトしか見ていないのが問題ではないかと思います。
STREX.cpp CString::TrimLeftのところ
>if (_tcschr(lpszTargets, *lpsz) == NULL)
が原因。
ということで、現状のソースコードのままでは対処不能でしょう。
文字セットをマルチバイト文字セットを使う→Unicode文字セットを使うに変え、
すべてをTCHAR対応に書き換えるのが一番の対処法でしょうが、影響が大きすぎるかなと。
やはり、CString::TrimLeft代替関数を自作するのが一番そう。
参考
全角スペースを削除
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200207/02070117.txt
Blueさん ありがとうございました
参考に示されたページの例にならって自作の関数を作ってうまくいきました