if(memcmp(版本,“\ x0 \ x0 \ x0”,3)== 0)

时间:2011-01-10 04:52:08

标签: c

我正在处理一段代码,其中包含如下声明:

if (memcmp (version, "\x0\x0\x0", 3) == 0 )       

与版本进行比较的数据是什么?它与“000”相比是否相同?

6 个答案:

答案 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”是一个数字,在记忆中有不同的表示。