ちょっと自前のアプリを作っていたところ、
「<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01//EN http://www.w3.org/TR/REC-
html4/strict.dtd>」
という文字列が書かれているかをチェックする必要があったので、
CStringクラスのCompareで比較しました。
最初は単に「\」でいけると思っていたのですが、どうも上手くいきませんでした。
「int debug = temp.CompareNoCase(<!DOCTYPE HTML PUBLIC \-//W3C//DTD HTML
4.01//EN\ \ http://www.w3.org/TR/REC-html4/strict.dtd\>);」
(tempには、上の文字列が入っています)
とやったところ、debug には、2147483647 などの数字が格納されてしまいます。
なんとか比較したいのですが、何か方法はありませんか??
(if文で1文字ずつチェックするような真似はしたくないです)
'本当に'その文字列が入っていますか? 試してみたらちゃんと 0 となりましたが。
>'本当に'その文字列が入っていますか?
デバッグ時の、「自動変数」ウィンドウで確認してます。
> 試してみたらちゃんと 0 となりましたが。
0って、temp.CompareNoCaseの返り値ですか?
0にならないから、困っています。
>> 試してみたらちゃんと 0 となりましたが。
> 0って、temp.CompareNoCaseの返り値ですか?
うん。
> 0にならないから、困っています。
なんでやろ…
CString temp = \abc\";
int debug = temp.CompareNoCase(\abc\");
これが 0 を返さぬワケがないのやけど。
> CString temp = \abc\";
> int debug = temp.CompareNoCase(\abc\");
は確かに0を返しています。
でもなんでだろう?
ちょっと、じっくり他の部分のバグを探してみます。
ファイルから文字列を読み込んで
比較してみても
やっぱり0が返ってきますね。
何が違うんでしょうね?
件の文字列は、外部ファイルから読み込んだものだったんですが、
実は、そのファイルっていうのがUnicodeでした・・・
そのため、0を返さなかったみたいです。
今度は、Shift-JISのファイルを読み込んでやってみたところ、
上手くいくようになりました。
ご迷惑おかけしました。