// 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!)
答案 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”。