逻辑比较在不应该C++时失败
Logical comparison fails when it shouldn't C++
我一直有一个问题,这种比较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 字符。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 生成MRPT库时cmake配置失败
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- variadic模板中的模板参数推导失败