我正在阅读,无法弄清楚如何正确地做到这一点。
我有一个无法更改的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);
答案 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;
}