我遇到了这个比较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
答案 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字符。