我想通过函数初始化C中的字符串数组。我用了这段代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void createArrayStrings(char ** listStr){
listStr = malloc (3 * sizeof(char*));
listStr[0] = malloc(2 * sizeof(char)); // N chars + '\0'
listStr[1] = malloc(3 * sizeof(char));
listStr[2] = malloc(4 * sizeof(char));
strcpy(listStr[0], "A");
strcpy(listStr[1], "AB");
strcpy(listStr[2], "ABC");
}
int main(int argc, const char * argv[]) {
char ** listStr = NULL;
createArrayStrings(listStr);
for (int i = 0;i<3;i++){
printf("%s\n",listStr[i]);
}
return 0;
}
但是printf中存在执行错误EXEC_BAD_ACCESS。 我的错误在哪里? 感谢。
答案 0 :(得分:1)
您不能在main中使用变量listStr,因为它永远不会填充实际值。当您调用createArrayStrings时,您传递的参数将按值复制 - 这意味着您在新函数中有一个新副本。 副本现在填充了您需要的数据,但不是主要的原始变量(它仍为空)。
最好的方法是让createArrayStrings返回listStr的值,并将它分配给main函数中的listStr:
char ** listStr = createArrayStrings();
新的创建功能如下所示:
void createArrayStrings(){
char ** listStr = malloc (3 * sizeof(char*));
...
return listStr;
}