我正在尝试做这样的事情:
struct SomeStruct {
const char *bytes;
const char *desc;
};
SomeStruct example = { { 0x10, 0x11, 0x12, 0x13 }, "10-13" };
为什么这不起作用?
答案 0 :(得分:8)
可能是因为{ 0x10, 0x11, 0x12, 0x13 }
是char
的数组,而不是指向char
的指针。
请尝试SomeStruct example = { "\x10\x11\x12\x13", "10-13" };
。
答案 1 :(得分:1)
因为{ ... }
语法仅适用于分配数组,而const char*
是指针,而不是数组。
如果您将bytes
声明为数组而不是char bytes[4];
- 则分配将有效。
答案 2 :(得分:1)
因为编译器无法将{1, 2, 3, 4}
转换为指向字节的指针(它可以将“10-13”转换为指向char的指针)。
您可以用'string'格式指定字节(如果您不介意bytes
指向的内存中的额外0x00 ):
SomeStruct example = {"\x10\x11\x12\x13", "10-13"};
答案 3 :(得分:1)
正如其他人所说,你的初始化序列对一个有效 数组,结构包含一个指针。您可以使用 maraguida的回答,使用字符串文字,但恕我直言,这 不是最具可读性的(如果您决定,它将不起作用 用显式常量替换显式常量)。该 更一般的解决方案是定义一个单独的命名数组,和 使用它:
char const structBytes10to13[] = { 0x10, 0x11, 0x12, 0x13 };
SomeStruct example = { structBytes10to13, "10-13" };
这适用于中的任意初始化表达式 字符数组。