【发布时间】:2020-04-22 15:20:12
【问题描述】:
在 main 中创建一个字符串数组并传递给一个函数。此函数从文件中读取字符串并将文件的每一行存储在数组的不同行中。然后完成并返回主程序。如果我在函数内 printf 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
}
}
【问题讨论】:
-
考虑到您将不兼容的类型传递给函数的
list参数,我真的很惊讶编译器会允许代码。 -
你不应该通过
&list吗? -
您是否收到任何编译器警告?
-
@Shark 不,这也是错误的。参数应为
char mylist[3000][40]或char mylist[][40]。 -
大家好,没有编译器警告,很奇怪。最后,我更正了@Jabberwocky 和 Vorac 所说的内容,并且效果很好。非常感谢!