我正在尝试做这样的事情:
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];
– 赋值将起作用。
因为编译器无法转换{1, 2, 3, 4}
为指向字节的指针(它可以将“10-13”转换为指向char的指针)。
您可以指定 'string' 格式的字节(如果您不介意 0x00 指向的内存中的额外 0x00bytes
):
SomeStruct example = {"\x10\x11\x12\x13", "10-13"};
正如其他人所说,您的初始化序列对数组有效,并且该结构包含一个指针。您可以使用 maraguida 的响应,使用字符串文字,但恕我直言,这不是最易读的(如果您决定用清单常量替换显式常量,它将不起作用)。更通用的解决方案是定义一个单独的命名数组并使用它:
char const structBytes10to13[] = { 0x10, 0x11, 0x12, 0x13 };
SomeStruct example = { structBytes10to13, "10-13" };
这将适用于字符数组中的任意初始化表达式。