【发布时间】:2011-11-16 06:01:19
【问题描述】:
我想读取用户的输入(多行)并使用 fputs() 将其写入文件。
这是我的代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char s[25];
fp=fopen("myname","w");
if(fp==NULL)
{
perror("Error opening file\n");
exit(1);
}
while(fgets(s,25,stdin)!=NULL)
fputs(s,fp);
fclose(fp);
return 0;
}
得到用户的输入后,我使用 Ctrl+C 关闭程序的输入提示(我使用的是 linux)。然后,如果我打开文件,它什么都不包含。我该如何解决这个问题?
fputs() & fgets() 的使用有什么问题吗?
【问题讨论】:
-
您的代码将中断 25 个字节的行。您可以使用
fgets(s, sizeof(s)-1, stdin)并且之前使用memeset(s, 0, sizeof(s));会更好。而getline是一个更好的函数(因为它动态分配线路)。 -
@BasileStarynkevitch,
fgets的手册页上写着fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s..... A '\0' is stored after the last character in the buffer。因此,在fgets()通话中使用 25 是安全的。我用超过 25 个字符的行测试了这段代码。不工作的原因是缓冲。添加fflush(fp)解决了它。抱歉迟到了评论。