fopen与pathname和变量filename不起作用

时间:2016-05-11 20:49:51

标签: c linux fopen relative-path

我在C中看到了一些类似的问题,但他们没有回答我的问题 一致的perror是错误:没有这样的文件或目录。 用户输入是aFile.txt,我确认该文件与程序存在于同一目录中 如果我手动更改:

input_file = fopen(path, "r");<br/>

于:

input_file = fopen(".\aFile.txt", "r");<br/>

IT工作......
此外,printf("path = %s\n", path);打印.\aFile.txt
这让我相信我的连接是可以的。 我做错了什么?

   char path[25] = "./";
   char filename[21];
   printf("Enter filename, max 20 characters: ");
   fgets(filename, 20, stdin);
   strcat(path, filename);
   strtok(path, "\n"); // FIXED THE ISSUE BY REMOVING THE trailing '\n'
   printf("path = %s\n", path);

   FILE * input_file;
   input_file = fopen(path, "r"); // fopen(".\aFile.txt", "r") works!!!
   if (input_file == NULL)
        perror("Error");
   else {
        loader(list, input_file);
        fclose(input_file);
        printf("list loaded from file succesfully.\n");
   }

2 个答案:

答案 0 :(得分:3)

fgets将包含换行符,所以很有可能这就是杀死它的原因。删除最后的换行符,它应该可以工作。

答案 1 :(得分:2)

正在阅读的新行。看到这个的一个好方法是打印带有前导和尾随&#34;的文件名:&#34;:

printf("path = :%s:\n", path);

印刷的是:

Server:junk Username$ ./a.out 
Enter filename, max 20 characters: test.txt
path = :./test.txt
:
Error: No such file or directory

注意第二个&#34;:&#34;正在换行。