C ++ struct char数组初始化

时间:2018-08-19 18:19:42

标签: c++ arduino

println("show each item: " + examples.foreach(println))

我的结构体中有char指针。 * string必须在创建时以char [10]形式初始化,而不使用类似malloc的函数(内存有限的arduino项目)。我可以简单地将结构体更改为

struct Label {
    char *string;
    int mode;
};

但是我也需要多次使用不同的字符串大小设置label.string =“ asd”。该如何解决?

2 个答案:

答案 0 :(得分:0)

您可以使用label.string函数以空终止的字符串值填充snprintf

示例:

    snprintf(label.string, 10, "asd" );
    snprintf(label.string, 10, "%c%c%c", 'a','s','d');
    snprintf(label.string, sizeof(label.string), "%s%d", "asd", 1);

从本质上来说,它的作用类似于普通的printf函数,但是前两个参数指定了目标缓冲区和该缓冲区的大小。当您尝试复制超出该缓冲区边界的字符串时,复制的字符串将被截断以适合缓冲区。请记住,第二个参数不应大于实际缓冲区的大小,因为您最终可能会覆盖其他一些内存区域。

请参阅:http://www.cplusplus.com/reference/cstdio/snprintf/

答案 1 :(得分:0)

好吧,我知道的唯一方法是存储char指针,默认情况下将其设置为静态分配的数组指针,并且可以在运行时对其进行更改:

struct Label {
    char stringArray[4];
    char *string = stringArray;
    int mode;
};

int main() {
    Label label;
    label.stringArray[0] = 'a';
    label.stringArray[1] = 'b';
    label.stringArray[2] = 'c';
    label.stringArray[3] = '\0';
    cout << label.string << endl;
    label.string = "bbbbbb";
    cout << label.string << endl;
    return 0;
}