c - 在外部函数中分配一个字符串数组

标签 c arrays string pointers malloc

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

这是代码:

int main() {

    char** book;

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

}

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

void FillBook( char*** book_pt ) {

    *book_pt = malloc( 5 * sizeof( char* ) ); //this is where I make space for 5 strings

    *book_pt[0] = malloc( 5 * sizeof( char ) ); //this one works
    strcpy(*book_pt[0], "ok"); 

    *book_pt[1] = malloc( 5 * sizeof( char ) ); //this one doesn't and the execution stops here
    strcpy(*book_pt[1], "no"); 

    return;
}

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

添加行:

(*book_pt == NULL)

在第一个 malloc 显示它不返回 NULL 值之后。

最佳答案

使用变量 char*** book_pt 的表达式缺少改变优先级的括号。

例如:

*book_pt[1]

应该是:

(*book_pt)[1]

没有括号的 [] 运算符优先于 * 运算符,但您需要先取消引用 book_pt

您的 *book_pt[0] 恰好可以工作,但这只是因为 book_pt[0]*book_pt 相同。但是,当索引 i 为 0 以外的任何值时,*book_pt[i](*book_pt)[i]<不同/.

关于c - 在外部函数中分配一个字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33944465/

相关文章:

Java代码越界异常

JavaScript 数组长度比较

java - 将两个不同对象的数组合并为一个数组/集合

c - 在内核空间中使用strsep来分隔字符串

c++ - 在 map 查找中找不到 const char*

C - 系统函数总是返回 -1

c - 二叉树节点以及与父节点的关系

c - c 中的多功能实用程序问题。

c# - 搜索字符串中每个出现的子字符串 C#

c - 检测非阻塞套接字上的关闭连接