2011-03-17 53 views
6

我試圖做這樣的事情:如何在struct inline中分配char數組?

struct SomeStruct { 
    const char *bytes; 
    const char *desc; 
}; 

SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" }; 

爲什麼不是這方面的工作?

+0

你有什麼錯誤?如果你發佈了一個關於*東西不能正常工作的問題*總是發佈錯誤或你得到的不正確的行爲。 – 2011-03-17 10:31:22

回答

8

可能因爲{ 0x10, 0x11, 0x12, 0x13 }char的數組,而不是指向char的指針。

嘗試用SomeStruct example = { "\x10\x11\x12\x13", "10-13" };代替。

1

因爲{ ... }語法只適用於分配數組,而const char*是一個指針,而不是一個數組。

如果您將bytes聲明爲數組而不是 - char bytes[4]; - 分配將起作用。

+0

但是有什麼辦法可以做出類似的工作嗎?就像,我可以像這樣聲明一個數組(char blah [] = {0x1,0x2,0x3};) – 2011-03-17 10:30:35

1

因爲編譯器不能將{1, 2, 3, 4}轉換爲指向字節的指針(它可以將「10-13」轉換爲指向char的指針)。

您可以指定「字符串」格式字節(,如果你不介意在存儲額外爲0x00指向bytes):

SomeStruct example = {"\x10\x11\x12\x13", "10-13"}; 
1

正如其他人所說,你的初始化序列對於 數組有效,並且該結構包含一個指針。您可以使用 maraguida的迴應,使用字符串文字,但恕我直言,這個 是不可讀性最強的(如果您決定用 來替換具有清單常量的顯式常量,它將不起作用)。該 更普遍的解決方案是定義一個單獨的命名數組, 使用它:

char const structBytes10to13[] = { 0x10, 0x11, 0x12, 0x13 }; 
SomeStruct example = { structBytes10to13, "10-13" }; 

這將爲 字符數組中的任意初始化表達式中使用。