问题描述
我试图创建一个字符串数组,并使用一个函数将其填充为字符“ 0”。代码如下:
void init_array(char **array)
{
int i;
int j;
i = 0;
while (i < 4)
{
array[i] = (char*)malloc(sizeof(char) * 5);
j = 0;
while (j < 4)
{
array[i][j] = '0';
array[i][4] = '\0';
j++;
}
i++;
}
}
int main(void)
{
char **c;
c = (char**)malloc(sizeof(**c) * 4);
init_array(c);
for (int i = 0; i < 4; i++)
printf("%s\n",c[i]);
}
这将打印带有0的数组,但第一行除外,该行显示奇怪的字符(问号等)。奇怪的是,如果我将i
函数中的init_array
的值更改为-1
,则整个数组将正确显示。谁能解释我在做什么错?
解决方法
**c
的类型为char
,因此sizeof(**c)
为1。将第一个数组分配替换为:
c = (char**)malloc(sizeof(*c) * 4);