6

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

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

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

为什么这不起作用?

4

4 回答 4

8

可能是因为{ 0x10, 0x11, 0x12, 0x13 }是 的数组char,而不是指向 的指针char

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

于 2011-03-17T10:28:39.803 回答
1

因为{ ... }语法只适用于分配数组,而是const char*指针,而不是数组。

如果您bytes改为声明为数组 – char bytes[4];– 赋值将起作用。

于 2011-03-17T10:28:53.853 回答
1

因为编译器无法转换{1, 2, 3, 4}为指向字节的指针(它可以将“10-13”转换为指向char的指针)。

您可以指定 'string' 格式的字节(如果您不介意 0x00 指向的内存中的额外 0x00bytes):

SomeStruct example = {"\x10\x11\x12\x13", "10-13"};
于 2011-03-17T10:29:46.187 回答
1

正如其他人所说,您的初始化序列对数组有效,并且该结构包含一个指针。您可以使用 maraguida 的响应,使用字符串文字,但恕我直言,这不是最易读的(如果您决定用清单常量替换显式常量,它将不起作用)。更通用的解决方案是定义一个单独的命名数组并使用它:

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

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

于 2011-03-17T10:51:11.633 回答