【问题标题】:about file io functions IN C关于 C 中的文件 io 函数
【发布时间】:2011-06-05 11:56:24
【问题描述】:

我正在处理文件 io 函数,谁能解释一下语句 2 的使用和工作,在下面的代码中,我想在这里输入字符串,然后想把它写到磁盘上.... .

#include<stdio.h>
#include<sttring.h>
int main()
{
    FILE *fp;
    char s[80];
    fp=fopen("noname00.cpp","w");
    while(strlen(gets(s))>0) /*parenthesis now at correct place*/ /*purpose of this statement */
    {
        fputs(s,fp);
        fputs("\n",fp);
    }
    fclose(fp);
    return 0;
}

简单但中肯的帮助将不胜感激。

【问题讨论】:

  • 你从哪里得到这个代码?它甚至不应该编译,include 指令有错字,并且布尔值的strlen 也是不合法的。
  • 另外,gets()危险的,并且已被弃用 for ages now。考虑使用更安全的东西,或者至少退回到fgets()
  • 不要使用gets。它不能安全使用。它已从the next language standard 中删除。
  • @Alfred 把书扔掉。看起来真的很糟糕。
  • @Alfred Nobel yes nobal 把那本书扔了。作者懒得更新书了!现代编译器不会编译上面写的和那本书中给出的代码!!

标签: c file input


【解决方案1】:

语句 2 到底是哪一个? char s[80];?它只是声明并定义了一个大小为 80 的字符数组。

如果您的意思是语句 2 是 while(strlen(gets(s)&gt;0)),我觉得它看起来不正确。 strlen() 接受 const char * 作为其参数,但您将其指定为整数:gets(s) &gt; 0

另外,永远不要使用gets(),因为http://c-faq.com/stdio/getsvsfgets.html

另外,获取http://en.wikipedia.org/wiki/The_C_Programming_Language 的副本并学习。

【讨论】:

    【解决方案2】:

    该语句的目的是测试是否只是“返回”以跳出循环。否则用户可以继续输入多行并在文件中添加多行。如果您真的只想允许一行,可以删除 while {}。

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2021-10-30
      • 2015-04-15
      • 1970-01-01
      相关资源
      最近更新 更多