我正在处理一段代码,其中包含如下声明:
if (memcmp (version, "\x0\x0\x0", 3) == 0 )
与版本进行比较的数据是什么?它与“000”相比是否相同?
答案 0 :(得分:6)
不,它与"000"
不同。它正在比较三个null(0)字节。每个字节是二进制的实际值零。这与"000"
不同,0
是一个包含可打印字符 "000"
的ASCII值的字符串,为48(或十六进制为30)。
因此"\x30\x30\x30"
与{{1}}相同。
答案 1 :(得分:4)
"\x0\x0\x0"
等于{ 0x00, 0x00, 0x00, 0x00 }
。第四个零是字符串null终止符。
所以回答你的问题 - 不,这与与"000"
比较不一样。
'\x0'
是十六进制零,而'0'
是字符0
的ASCII代码(十六进制30)。
答案 2 :(得分:1)
不 - 与"000"
的比较不一样。它与三个空字符进行比较。等效的,可能更期望的字符串是"\0\0\0"
。或者只是一个填充0
的3个字符的数组,对于这种情况,代码只检查3个字符。
答案 3 :(得分:1)
\x0
代表char
,其值为0. 0
不同,它是代码为0x30的ASCII字符。
答案 4 :(得分:0)
了解变量version
的定义会很有趣。是void *
还是char *
还是其他一些奇怪的演员。这可能在编译期间发出警告。
审视version
如何初始化以确保没有错误也是明智的。在程序中检查(缺少a)版本号肯定是一种奇怪的方法。
答案 5 :(得分:-1)
没有。 \ x0是NULL的文字。 “000”是一个数字,在记忆中有不同的表示。