C - 文件处理和EOF

时间:2012-08-09 06:55:01

标签: c macos gcc

// Write a file using fputs()

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#undef EOF
#define EOF "#"

int main(int argc, char *argv[])
{
      if(argv[1] == NULL)
             exit(EXIT_FAILURE);

      FILE *file = fopen(argv[1], "w")
      char *str;

      while(strcmp(str, EOF))
             fputs(str, file);

      fclose(file);
      exit(EXIT_SUCCESS);
}

当我运行它时,在指定我的argv [1]的文件中的内容的开头总是有一个空格。为什么会这样?

另外如何输入EOF?每次我按下

control + D,

它将它作为另一个输入。 我将“#”定义为EOF,但它位于文件内容的末尾。如果我按下

control + Z 

然后尝试用textmate打开它,它说filesize很大(一旦显示2825 MB!)

1 个答案:

答案 0 :(得分:3)

您正在编写未初始化指针指向的内容。

  char *str;

  while(strcmp(str, EOF))
         fputs(str, file);

未初始化指针的内容可能指向空格。由于访问它是未定义的行为,因此您观察到的行为属于可能的结果范围。

目前还不清楚你真正想做什么。

如果您尝试将输入提供给您的程序,则您的程序尚未编写为读取任何输入,因此您的程序无法检测到EOF。

如果您正在尝试读取输入,那么您需要使用这样做的功能。一种可能性是fgets

char str[256];

while (fgets(str, sizeof(str), stdin) != 0)
    fputs(str, file);

你的一个标签是osx,所以你想从命令行使用“control D”。