如何在struct inline中指定char数组?

时间:2011-03-17 10:23:47

标签: c++ arrays struct inline declare

我正在尝试做这样的事情:

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

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

为什么这不起作用?

4 个答案:

答案 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" };

这适用于中的任意初始化表达式 字符数组。