9 c malloc double-pointer multidimensional-array
在 C 中,我使用 achar **
来保存一系列字符串。
这是我的代码:
char ** c;
//now to fill c with data ????
//cannot change:
printf ("%*s%s", 0, "", *c);
while (*++w)
printf (" %s", *c);
Run Code Online (Sandbox Code Playgroud)
我不知道如何填充c
数据。正确的方法是什么?我无法更改 3 条打印行,因为它们位于外部函数中。
我认为术语在这里很重要。它char **
根本不“保存”一系列字符串(与 C 高级语言中的容器对象不同)。该变量c
只是一个指向字符的指针,该字符将成为以 null 结尾的字符串中的第一个字符。
这种思路直接引出了解决方案:如果 c 是一个指向字符的指针,则意味着我们必须分配一些内存来实际保存字符串数组。
@DB_Monkey 作为评论发布的解决方案试图做到这一点,但不太正确,因为它意味着像这样的代码c[0] = "cat"
将“cat”复制到 中c[0]
,但事实并非如此——赋值应用于指针,而不是字符串。更好的方法是:
int rows = 3;
char **c = calloc (rows,sizeof(char*));
c[0] = "cat";
c[1] = "dog";
c[2] = "mouse";
Run Code Online (Sandbox Code Playgroud)
这也表明没有必要显示每个字符串的显式 null 终止。