如何从其他函数初始化char **?

时间:2018-09-30 18:34:13

标签: c

我在以下代码上遇到分段错误:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

void init_test(char ***test) {
    *test = malloc(2 * sizeof(char *));
    *test[0] = malloc(3); 
    *test[1] = malloc(3); 
    strcpy(*test[0], "12"); 
    strcpy(*test[1], "13"); 
}

int main()
{
    char **test = NULL;
    init_test(&test); 
    printf("1: %s, 2: %s", test[0], test[1]); 
    printf("Hello World");
    return 0;
}

我对此有两个不同的变体,但是我不确定如何在其他函数中正确初始化char **。

2 个答案:

答案 0 :(得分:3)

这是operator precedence的问题。表达式*test[0]等于*(test[0]),而不是您期望的(*test)[0]

答案 1 :(得分:1)

数组索引运算符的优先级比解除引用运算符的优先级高。您需要添加括号:

(*test)[0] = malloc(3); 
(*test)[1] = malloc(3); 
strcpy((*test)[0], "12"); 
strcpy((*test)[1], "13");