println("show each item: " + examples.foreach(println))
我的结构体中有char指针。 * string必须在创建时以char [10]形式初始化,而不使用类似malloc的函数(内存有限的arduino项目)。我可以简单地将结构体更改为
struct Label {
char *string;
int mode;
};
但是我也需要多次使用不同的字符串大小设置label.string =“ asd”。该如何解决?
答案 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
函数,但是前两个参数指定了目标缓冲区和该缓冲区的大小。当您尝试复制超出该缓冲区边界的字符串时,复制的字符串将被截断以适合缓冲区。请记住,第二个参数不应大于实际缓冲区的大小,因为您最终可能会覆盖其他一些内存区域。
答案 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;
}