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

时间:2015-11-26 17:43:00

标签: c arrays string pointers malloc

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

这是代码:

int main() {

    char** book;

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

}

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

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值之后。

1 个答案:

答案 0 :(得分:3)

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

例如:

*book_pt[1]

应该是:

(*book_pt)[1]

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

您的*book_pt[0]恰好可行,但这只是因为book_pt[0]*book_pt相同。但是当索引i除了0之外的任何内容时,*book_pt[i] 与<{em}不同

相关问题