C语言中的fputs()函数换行行为

7
有些难以理解的程序(如下)。 我有一点疑惑于语句 fputs("\n",fp)。 例如,让我输入:

It doesn't matter what you are underneath
Its what you do that defines you.

如果我不提及 fputs("\n",fp) ,字符串就会显示在单行上。但使用此代码后,字符串就会保存为原样。
现在问题是:如何在所需位置插入 \n ,因为通常情况下 \n 应该添加在文本末尾。
任何帮助都将不胜感激。
int main()

{
    FILE *fp;

    char s[80];
    fp=fopen("abc.txt","w");
    if(fp==NULL)
    { 
            puts("Cannot open file");
            exit(1);
    }
    printf("\nEnter a few lines of text:\n");
    while(strlen(gets(s))>0)
    {
          fputs(s,fp);
          fputs("\n",fp);
    }
    fclose(fp);
    return 0;
}

1
fputs写入您提供的字符串,不会附加任何字符到该字符串。另一方面,puts会附加一个换行符。这是一个不一致的api。 - Charlie Burns
想一想,这个差异与 gets() 和 fgets() 之间是一样的(除了 fgets() 允许指定缓冲区大小)。 - Medinoc
如果你看到错误信息 Type "char" is not compatible with parameter type "const char*",请确保你使用了双引号 "\n" - CodeManX
2个回答

13

gets(不应该使用并已从最新的C标准中删除)不会在其缓冲区中保存\n(而fgets会保存)。

fputsputs不同,它不会自动在写入的字符串末尾插入换行符。因此,通过在输出每个键入的行后添加fputs("\n", fp); (或fputc('\n',fp)),您可以在文件中插入缺少的换行符。


4

fputs不会自动向输出中添加换行符(与puts相反,puts会自动添加)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接