【问题标题】:unable to write into file无法写入文件
【发布时间】:2015-05-20 07:58:12
【问题描述】:

这是将内容写入文件的代码。

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
   FILE *fp;
   char ch(90);
   fp = fopen("books.txt","w");
   if(fp == NULL)
   {
        puts("Cannot open file");
   }
   printf("Enter lines of text:");
   while(strlen(gets(ch)) > 0)
   {
       fputs(ch, fp);
   }
   fclose(fp);
}

我收到 4 个错误。它们是:

  1. 无法在函数main() 中将int 转换为char *
  2. 在函数 main() 中调用 gets(char *) 时,参数 __s 中的类型不匹配。
  3. 无法在函数main() 中将int 转换为const char *
  4. 在函数 main() 中调用 fputs(const char *,FILE *) 时,参数 __s 中的类型不匹配。

【问题讨论】:

    标签: c arrays file file-io


    【解决方案1】:

    我相信你对 char 数组的定义是错误的:

    char ch(90);
    

    必须

    char ch[90];
    

    【讨论】:

    • 你能发布你的编译器的完整输出吗
    • 我关闭了我的源文件,然后重新打开并编译它......它可以工作。谢谢先生。
    【解决方案2】:

    在您的代码中

     char ch(90);
    

    被认为是一个函数声明,这不是你想要的。你需要使用[] 操作符来表示一个数组,比如

     char ch[90];  //array named ch having 90 chars
    

    之后,如果if(fp == NULL) 成功(即文件打开失败),仅打印一条消息不够。您不应在程序的任何地方进一步使用返回的fp,即,您必须跳过所有涉及该fp 的语句。否则,使用 invalid 文件指针将导致undefined behaviour

    也就是说,

    1. 永远不要使用gets(),而是使用fgets()
    2. main() 的正确签名是int main(void)

    【讨论】:

    • 从错误消息看来,OP 使用的编译器认为 char ch(90); 是带有初始化的声明(C++ 风格)。
    • @halex 刚刚解决了这个问题。 :-)
    【解决方案3】:

    首先:

    你的字符数组定义应该是:

    char ch[90];
    

    其次:

    您对main 的定义应该是:

    int main(void)
    

    第三:

    考虑使用fgets() 而不是gets()

    【讨论】:

      【解决方案4】:

      检查char数组定义,

      应该像 char ch[90];

      【讨论】:

        猜你喜欢
        • 2015-02-18
        • 2020-07-24
        • 2019-12-11
        • 2021-02-19
        • 2017-04-08
        相关资源
        最近更新 更多