Char ** 用法和打印

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 条打印行,因为它们位于外部函数中。

Sim*_*mon 8

我认为术语在这里很重要。它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 终止。