我有一个包含字符串数组的结构,但我有时会因为如何使用它而丢失 例如:
struct A
{
char** b;
};
size_t two = 2;
struct A a = malloc(sizeof(struct A));
b = (char**) malloc(sizeof(char*) * 2);
a->b[0] = "1";
snprintf(a->b[1], 4, "%d", two); //this line makes a mess
如果我将snprintf用于我定义为char *类型的变量,但是不是a-> b [1] char *类型本身,那么它的效果非常好吗? 为什么它不起作用(如果我在a-> b [1]上使用printf,它会显示值,但是当我之后执行任何malloc时程序会崩溃)我该怎么做才能使它工作?
答案 0 :(得分:2)
这一行
snprintf(a->b[1], 4, "%d", two);
取消引用a->b[1]
,尚未设置。你不能写入它。如果您想写入a->b[1]
,请执行以下操作:
a->b[1] = malloc(4);
snprintf(a->b[1], 4, "%3d", two);
现在a->b[1]
有一个可写的4字节内存块。 %3d
将输出限制为三位数,以防变量two
设置为较大的数字。