当它不应该是C ++时,逻辑比较失败

时间:2014-09-13 08:17:25

标签: c++ vector

我遇到了这个比较if (code->at(i) == guess.at(i))的问题 即使不应该因为它们都是'0'而失败:http://puu.sh/bvCRB/c640fb85a4.png

guess是char s(vector<char> guess){的向量 code是指向char vector<char> * code

向量的指针

2 个答案:

答案 0 :(得分:5)

请注意Visual Studio显示的区别:

Name       Char     Value
code[0]    '\0'      0
guess[0]   '0'       48

也就是说,'0'(存储在guess[0]中)是一个字符0,其中包含ASCII代码48,而code[0]包含'\0' 0 (参见代表转义字符的反斜杠),这是一个带有ASCII代码{{1}}的特殊字符(称为nul终止字符)。因此,它们是不同的。

答案 1 :(得分:2)

'0''\0'不一样,即使是视觉工作室也会向您展示他们的价值观不同。十六进制中的'0'30,十六进制中的空终结符'\0'00。它们不相等,它们在记忆中的表现形式不同,因此你的比较失败了。如果你看一下ascii表,你会看到以下内容:

   Oct   Dec   Hex   Char       
   ──────────────────────────
   000   0     00    NUL '\0' 
   060   48    30    0        

'\0'是一个特殊字符,用于表示c样式字符串的结尾,而'0'只是一个ascii字符。