snprintf和字符串数组语法

时间:2016-04-09 21:50:00

标签: c arrays string struct printf

我有一个包含字符串数组的结构,但我有时会因为如何使用它而丢失 例如:

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时程序会崩溃)我该怎么做才能使它工作?

1 个答案:

答案 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设置为较大的数字。