从函数中更改char数组

时间:2013-11-17 18:33:54

标签: c arrays function char

我正在阅读,无法弄清楚如何正确地做到这一点。

我有一个无法更改的main.c,我给了一个char数组char fn[MAX]; max是100.它传递给函数readFileName(fn);这是我得到用户输入的地方获取新文件名。每次运行我的函数时,都会出现分段错误(核心转储)错误。这就是我的功能。显然我做错了,但我不确定为什么。我需要在某个地方制作指针吗?任何帮助将不胜感激。

void readFileName(char fn[]){
    printf("Please enter the new file that you would like to open\n");
    scanf("%s", fn);

    printf("%s", fn);
}

这是该计划的开始

int main(int argc, char *argv[]){
    int month, choice;
    int * temps;
    FILE * fin = NULL;
    char fn[MAX];
    fin = openFile(argc, argv);

    month = readMonth(fin);
    temps = fillArray(month, fin);

这是在程序结束时

            fclose(fin);
            fin = NULL;
            cleanUp(temps);
            temps = NULL;
            readFileName(fn);
//          fin = openInputFile(fn);
            month = readMonth(fin);
            temps = fillArray(month, fin);

1 个答案:

答案 0 :(得分:0)

我建议使用fgets而不是scanf,否则每次输入长于MAX时应用程序都会崩溃。 scanf正在写入已分配的内存边界,弄乱主函数内的堆栈内存。 (当然,如果用户输入太长并且需要刷新,stdin可能仍然会在其中包含字符,但这是另一个故事)。

这是一个最小的例子:

#include <cstdio>

#define MAX 100

void readFileName(char fileName[]){
    printf("Please enter the new file that you would like to open\n");
    fgets(fileName, MAX, stdin);

    printf("%s", fileName);
}

int main() {
    char fileName[MAX];
    readFileName(fileName);
    printf("Still works here: %s", fileName);
    return 0;
}