大久保です。


Reply to "[mfc 47990] char型の比較にておかしな動作"
(Message-Id: <20040131202804.130A.NAKAHARA@inst.ne.jp>
at Sat, 31 Jan 2004 20:56:43 +0900, nakahara wrote)
> 3 if (psMem->szNameF[i+1]>=(char)0x40 && psMem->szNameF[i+1] <= (char)0x96) {
> 4 ほにゃらら;
> 5 }
> 6 }
> 1の部分で、psMem->szNameF[i]は0x83で問題なく通過、
> 3の部分で、psMem->szNameF[i+1]は0x7eですが、なぜか「ほにゃらら」に行かずに6に飛びます。

VC++ではcharはデフォルトで符号付き型ですから,3行目は
if (psMem->szNameF[i+1]>=64 && psMem->szNameF[i+1] <= -106) {
という意味になります。故に,この式は常に負です。
if ((unsigned)psMem->szNameF[i+1]>=0x40 && (unsigned)psMem->szNameF[i+1] <= 0x96) {
のように書く必要があります。


では。


-- 
大久保 雄介(Okubo Yusuke)
mailto:y...@n01.itscom.net , mailto:y...@js5.so-net.ne.jp