【问题标题】:How to assign char array in struct inline?如何在 struct inline 中分配 char 数组?
【发布时间】:2011-07-17 07:15:58
【问题描述】:

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

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

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

为什么这不起作用?

【问题讨论】:

  • 您遇到什么错误?如果您发布关于某些东西不起作用的问题,请始终发布您遇到的错误或不正确的行为。

标签: c++ arrays struct inline declare


【解决方案1】:

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

改用SomeStruct example = { "\x10\x11\x12\x13", "10-13" };

【讨论】:

    【解决方案2】:

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

    如果您将 bytes 声明为数组而不是 - char bytes[4]; - 分配将起作用。

    【讨论】:

    • 但是有什么办法可以让这样的事情发挥作用吗?就像,我可以声明一个这样的数组 (char blah[] = {0x1, 0x2,0x3};)
    【解决方案3】:

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

    你可以指定'string'格式的字节(如果你不介意bytes指向的内存中有一个额外的0x00):

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 2021-12-14
        相关资源
        最近更新 更多