我試圖做這樣的事情:如何在struct inline中分配char數組?
struct SomeStruct {
const char *bytes;
const char *desc;
};
SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" };
爲什麼不是這方面的工作?
我試圖做這樣的事情:如何在struct inline中分配char數組?
struct SomeStruct {
const char *bytes;
const char *desc;
};
SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" };
爲什麼不是這方面的工作?
可能因爲{ 0x10, 0x11, 0x12, 0x13 }
是char
的數組,而不是指向char
的指針。
嘗試用SomeStruct example = { "\x10\x11\x12\x13", "10-13" };
代替。
因爲{ ... }
語法只適用於分配數組,而const char*
是一個指針,而不是一個數組。
如果您將bytes
聲明爲數組而不是 - char bytes[4];
- 分配將起作用。
但是有什麼辦法可以做出類似的工作嗎?就像,我可以像這樣聲明一個數組(char blah [] = {0x1,0x2,0x3};) – 2011-03-17 10:30:35
因爲編譯器不能將{1, 2, 3, 4}
轉換爲指向字節的指針(它可以將「10-13」轉換爲指向char的指針)。
您可以指定「字符串」格式字節(,如果你不介意在存儲額外爲0x00指向bytes
):
SomeStruct example = {"\x10\x11\x12\x13", "10-13"};
正如其他人所說,你的初始化序列對於 數組有效,並且該結構包含一個指針。您可以使用 maraguida的迴應,使用字符串文字,但恕我直言,這個 是不可讀性最強的(如果您決定用 來替換具有清單常量的顯式常量,它將不起作用)。該 更普遍的解決方案是定義一個單獨的命名數組, 使用它:
char const structBytes10to13[] = { 0x10, 0x11, 0x12, 0x13 };
SomeStruct example = { structBytes10to13, "10-13" };
這將爲 字符數組中的任意初始化表達式中使用。
你有什麼錯誤?如果你發佈了一個關於*東西不能正常工作的問題*總是發佈錯誤或你得到的不正確的行爲。 – 2011-03-17 10:31:22