使用文件时出错

时间:2015-02-02 18:16:59

标签: c

我正在尝试使用C语言中的文件。当我通过命令行输入文件名时,它可以工作,但是当我尝试在标准输入上输入文件名时,它不起作用。这是我的代码:

int main()
 {
  FILE * input;
  char  fileName[100];
  printf("Enter file name\n");
  scanf("%c",fileName);
  input=fopen(fileName,"r");
  readData(input);
  return 0;
 }

我按此运行此代码 -

gcc temp.c -o exe
./exe
Enter file Name
input.txt

这会出现此错误:

File not found or unable to read
Segmentation fault (core dumped)

但这有效:

int main(int argc,char *argv[])
 {
  FILE * input;

  input=fopen(argv[1],"r");
  readData(input);
  return 0;
 }

我运行这样的代码:

gcc temp.c -o exe
/exe input.txt

为什么第一个出错?

3 个答案:

答案 0 :(得分:3)

注意这一行

scanf("%c", fileName);

%c格式字符串只接受单个字符。要读取整个字符串,请使用%s格式字符串。

答案 1 :(得分:1)

scanf("%c",fileName);读取1 char并将其保存到fileaName。此时,fileaName只是char的数组,其第一个char已初始化。它不是字符串char的数组,包括终止'\0'

fopen(fileName,"r");期望fileName中有一个字符串,但该变量未正确填充。因此错误"文件未找到或无法读取 分段错误(核心转储)"

使用scanf("%99s",fileName);

这将1)跳过像' '这样的前导空格,然后2)将最多99个非空格char保存到fileName,最后添加'\0' 。 99非常重要,因为不会溢出fileName[100]

答案 2 :(得分:0)

首先

scanf("%c",fileName);

你尝试阅读单个字符。尝试

scanf("%s",fileName);

还使用nulls初始化数组

char  fileName[100] = {0};