C 如何从其他函数初始化字符**?

C 如何从其他函数初始化字符**?,c,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");

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

#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;
}
#包括
#包括
#包括
无效初始测试(字符***测试){
*测试=malloc(2*sizeof(char*));
*测试[0]=malloc(3);
*试验[1]=malloc(3);
strcpy(*检验[0],“12”);
strcpy(*测试[1],“13”);
}
int main()
{
字符**测试=空;
初始测试(和测试);
printf(“1:%s,2:%s”,测试[0],测试[1]);
printf(“你好世界”);
返回0;
}

我有几个不同的版本,但我不知道如何在不同的函数中正确初始化char**

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

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

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