我想通过函数在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。我的错误在哪里?谢谢。
您不能在main中使用变量listStr,因为它永远不会填充实际值。调用createArrayStrings时,所传递的参数将按值复制-这意味着您在新函数中有一个NEW副本。现在,该副本将填充您需要的数据,但不会填充main中的原始变量(它仍然为null)。
最好的方法是让createArrayStrings返回listStr的值,并将其分配给主函数中的listStr:
char ** listStr = createArrayStrings();
新的create函数将如下所示:
void createArrayStrings(){
char ** listStr = malloc (3 * sizeof(char*));
...
return listStr;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句