逻辑比较在不应该C++时失败

Logical comparison fails when it shouldn't C++

本文关键字:C++ 失败 不应该 比较      更新时间:2023-10-16

我一直有一个问题,这种比较if (code->at(i) == guess.at(i))失败,即使它不应该,因为它们都是"0":http://puu.sh/bvCRB/c640fb85a4.png

guess是炭s(vector<char> guess){的载体code是指向字符向量的指针vector<char> * code

请注意Visual Studio显示内容的差异:

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

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

'0'''是不一样的,甚至Visual Studio也告诉你它们的值是不同的。 十六进制中的'0'30,十六进制中的空终止符''00。它们不相等,它们在内存中的表示形式不同,因此您的比较失败。如果您查看 ascii 表,您将看到以下内容:

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

'' 是一个特殊字符,例如用于指示 C 样式字符串的结尾,而'0'只是一个 ASCII 字符。