在main中创建一个字符串数组,并将其传递给函数。此函数从文件读取字符串,并将文件的每一行存储在数组的另一行中。然后完成并返回到main。如果我在函数中打印array [i]的内容,则屏幕上显示的文本可以。如果我在返回main()之后执行相同的操作,则printf仅写入垃圾。为什么main()无法访问数组的内存位置的内容?
void createlist(char* file, char **mylist) {
FILE* stream;
char name[40];
int i = 0;
stream = fopen(file, "r");
while (fgets(name, sizeof(name), stream) != NULL) {
mylist[i] = name;
printf(mylist[i]); // <------------------------This works OK!
i++;
}
fclose(stream);
}
void main(int argc, char* argv[]) {
char list[3000][40];
int i = 0;
resetchararray(list, 3000);
createlist("file", list);
for (i = 0; i < 3000; i++) {
printf(list[i]); // <---------------------This writes garbage
}
}
name
是函数中的局部变量。函数结束后它消失,仅留下垃圾。要实现您的尝试,请使用strcpy()
,而不是mylist[i] = name;
。