将字符串数组传递给C中的函数

时间:2014-11-23 11:07:22

标签: c arrays string parameter-passing

我想通过函数初始化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。 我的错误在哪里? 感谢。

1 个答案:

答案 0 :(得分:1)

您不能在main中使用变量listStr,因为它永远不会填充实际值。当您调用createArrayStrings时,您传递的参数将按值复制 - 这意味着您在新函数中有一个新副本。 副本现在填充了您需要的数据,但不是主要的原始变量(它仍为空)。

最好的方法是让createArrayStrings返回listStr的值,并将它分配给main函数中的listStr:

char ** listStr = createArrayStrings();

新的创建功能如下所示:

void createArrayStrings(){
    char ** listStr = malloc (3 * sizeof(char*));
    ...
    return listStr;
}