C 在外部函数中分配字符串数组

C 在外部函数中分配字符串数组,c,arrays,string,pointers,malloc,C,Arrays,String,Pointers,Malloc,我试图通过另一个函数分配一个字符串数组。我基本上可以做到这一点,但当我在另一个函数中尝试它时(添加了另一个指向级别),我被卡住了 代码如下: int main() { char** book; FillBook( &book ); ... ... } 现在我尝试为5个3个字母的字符串分配内存,并填充它们,但我被卡住了(程序执行停止): 在*book_pt[0]之后,我尝试分配的每个指针都会产生相同的效果。 它也使用strdup做同样的事情 添加行:

我试图通过另一个函数分配一个字符串数组。我基本上可以做到这一点,但当我在另一个函数中尝试它时(添加了另一个指向级别),我被卡住了

代码如下:

int main() {

    char** book;

    FillBook( &book );
    ...
    ...

}
现在我尝试为5个3个字母的字符串分配内存,并填充它们,但我被卡住了(程序执行停止):

在*book_pt[0]之后,我尝试分配的每个指针都会产生相同的效果。 它也使用strdup做同样的事情

添加行:

(*book_pt == NULL)

第一个malloc显示它不返回空值。

使用变量
char***book\u pt
的表达式缺少改变优先级的括号

例如:

*book_pt[1]
应该是:

(*book_pt)[1]
如果没有括号,[]运算符优先于*运算符,但您需要先取消引用
book\u pt


您的
*book\u pt[0]
碰巧可以工作,但这只是因为
book\u pt[0]
*book\u pt
相同。但是当索引
i
不是0时,
*book\u pt[i]
不同于
(*book\u pt)[i]

我想你需要
(*book\u pt)[1]=
。检查,对于0索引,它是等价的。问题是
*book\u pt[1]
谢谢,看起来我在问之前并没有花太多时间尝试,但实际上我做了,谢谢again@MatthewGunn请随意改进答案。因此,我更喜欢
1[*book\u pt]
——它巧妙地避免了歧义
(*book_pt)[1]