我一直在尝试执行以下代码。虽然任务很简单,但我遇到了分段错误。
代码片段的目的是创建一个最大行大小为4和列大小为33的多维数组。然后在创建之后,它应该将所有行的内容设置为0,然后是{{1} }字符。最后,它应该在'\0'
上显示输出。
虽然我不是编程的新手,但我仍然会遇到类似的错误,所以如果可能的话请解释我如何避免将来出现这样的错误。
stdout
答案 0 :(得分:5)
你是memset
错误的指针。
而不是:
memset(arr,0,8);
你想要:
memset(arr[i],0,8);
所以你离开了一个间接层。
正如评论中所指出的,这里有一些优化:
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(9 * sizeof(char));
memset(arr[i],0,9);
}
或
for ( i = 0; i < 4; i++) {
arr[i] = (char*) calloc(9, sizeof(char));
}
请注意,C中不需要转换为char*
。
如果你想要字符'0'
而不是空字符,那么你应该这样做:
for ( i = 0; i < 4; i++) {
arr[i] = (char*) malloc(8 * sizeof(char));
memset(arr[i],'0',8);
arr[i][8] = '\0';
}
答案 1 :(得分:1)
memset(arr,0,8);
是问题,你正在清除指针数组
尝试:
memset(arr[i], '0', 8);
假设您要用零填充字符串
答案 2 :(得分:0)
我认为你有一个逻辑错误:
memset(arr[i],0,8);
你也不需要设置它:
arr[i][8] = '\0';
相反,你可以这样做:
memset(arr[i],0,9);
'\ 0'字符与0没什么不同。