2010-05-22 23 views
1

可以說我有這個你可以使用十六進制在char **中聲明數據嗎?

char *something[] = { 
    "/bi", 
    "-c", 
    "5", 
    NULL, 
    NULL 
}; 

,但我要聲明其十六進制,我將如何做到這一點;編譯器不斷在我身上發現錯誤:

char *something[] = { 
    {0x2f,0x62,0x69}, 
    {0x2d,0x63}, 
    {0x35}, 
    {0x00}, 
    {0x00} 
}; 

添加其他內容到此,是0x00總是空?例如,在NULL爲-1的系統上,0x00總是轉換爲NULL?

+2

爲了回答編輯,可以使用任何計算爲「0」的整數常量表達式(例如,'0','0x0','1-1')作爲空指針常量。 – 2010-05-22 19:16:54

+0

你確實意識到你的兩個代碼片段不一樣嗎? ''「-c」'等同於'{0x2d,0x63,0x00}'。最後兩項在第一個例子中是空指針,而在第二個例子中是指向空字符串的指針。 – JeremyP 2010-05-22 22:24:24

+0

其實,我的評論的第二部分可能是錯的。 – JeremyP 2010-05-22 22:25:40

回答

6

您可以在字符串文字中使用十六進制轉義序列。例如:

char *something[] = { 
    "\x2f\x62\x69", 
    "\x2d\x63" 
}; 
+0

awsome,它們是否自動終止或者是否需要在每個索引的末尾添加\ x00? – user318747 2010-05-22 19:10:58

+0

@bstullkid:它們只是帶有轉義序列的字符串文字,所以,它們是以null結尾的。 – 2010-05-22 19:12:00

+0

檢查我的編輯,如果你能回答那個thx。 – user318747 2010-05-22 19:14:43