我在一段代碼,具有如下的陳述工作:如果(memcmp(版本, 「 X0 X0 X0」,3)== 0)
if (memcmp (version, "\x0\x0\x0", 3) == 0)
什麼是數據那正在與版本進行比較?與「000」相比是否相同?
我在一段代碼,具有如下的陳述工作:如果(memcmp(版本, 「 X0 X0 X0」,3)== 0)
if (memcmp (version, "\x0\x0\x0", 3) == 0)
什麼是數據那正在與版本進行比較?與「000」相比是否相同?
編號 \ x0是NULL的文字。 「000」是一個數字,在內存中有不同的表示形式。
`\ x0`(或`\ 0`)是NUL字符的文字。 NULL(帶有兩個L)通常是爲指針保留的。 – 2011-01-10 05:02:11
`「000」`不是一個數字 - 它是一個字符串。 – mizo 2011-01-10 06:07:31
不,它與"000"
不一樣。它比較三個空(0)字節。每個字節都是二進制的實際零值。這是不同於"000"
,其是含有用於可打印的字符0
,這是48個ASCII值的字符串(或30進制)
所以"000"
將是相同"\x30\x30\x30"
。
否 - 與"000"
比較不同。它與三個空字符進行比較。一個等效的,可能更多預期的字符串將是"\0\0\0"
。或者只是一個填充了0
的3字符數組,在這種情況下,代碼只能檢查3個字符。
"\x0\x0\x0"
等於{ 0x00, 0x00, 0x00, 0x00 }
。第四個零是字符串null終止符。
所以要回答你的問題 - 不,這與"000"
相比並不相同。
'\x0'
是十六進制零,而'0'
是字符0
(十六進制30)的ASCII碼。
\x0
代表值爲0的char
。0
不同,它是帶有代碼0x30的ASCII字符。
知道變量version
的定義會很有趣。是void *
或char *
或其他一些奇怪的鑄造。編譯過程中可能會發出警告。
看看version
是如何初始化以確保沒有錯誤也是謹慎的。在程序中檢查(缺少)版本號肯定是一種奇怪的方式。
備註:在這個非常特殊的情況下,每個'x'是不必要的。 – Mehrdad 2011-01-10 05:07:12