以下代码“应该”将字符串数组存储在
当我运行这段代码时,出现了段错误。错误来自于以下代码行:
sprintf(data->name[i], "Name %u", i + 1);
有什么想法是哪里出错了吗?
更新:如果我采取以下方法,代码就能编译通过(但我想避免这种情况):
struct data
下的变量name
中。假设数组元素的数量在运行时确定,在下面的示例代码中,它们使用DYNAMIC_ELEMENTS
定义。字符串使用sprintf
格式化。#define DYNAMIC_ELEMENTS 10
struct data {
char **name;
};
int main()
{
struct data *data = calloc(1, sizeof(*data));
data->name = calloc(DYNAMIC_ELEMENTS, sizeof(data->name[0]));
for (int i = 0; i <= DYNAMIC_ELEMENTS; i++) {
sprintf(data->name[i], "Name %u", i + 1);
printf("%s\n", data->name[i]);
}
return 0;
}
当我运行这段代码时,出现了段错误。错误来自于以下代码行:
sprintf(data->name[i], "Name %u", i + 1);
有什么想法是哪里出错了吗?
更新:如果我采取以下方法,代码就能编译通过(但我想避免这种情况):
//...
char buf[127];
sprintf(buf, "Name %u", i + 1);
data->name[i] = strdup(buf);
//...
calloc(256, sizeof(data->name[0][0]));
限制字符串大小为255字节。如果这是书的页数或极大的数字呢? - S.S. Anneunsigned
,十进制表示需要11个字节来存储“4294967295”,这也适合256个字节 - 是的,相当过度了。 - chux - Reinstate Monica