C中的字符串数组:在函数内可以,在main()中充满垃圾

问题描述 投票:0回答:1

在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
    }
}
c arrays string garbage
1个回答
0
投票

name是函数中的局部变量。函数结束后它消失,仅留下垃圾。要实现您的尝试,请使用strcpy(),而不是mylist[i] = name;

© www.soinside.com 2019 - 2024. All rights reserved.