如何解决分配char **时的奇怪行为
我试图创建一个字符串数组,并使用一个函数将其填充为字符“ 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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。