qq_43412960
2019-10-08 14:22
采纳率: 79.1%
浏览 291

这是一个关于C语言的写文件数据问题

#include<stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<String.h>
int main()
{
FILE *fp;
char ch;
char   zeng[20];
fp=fopen("F:\\啦啦.txt","at+");


     if((fp=fopen("F:\\啦啦.txt","at+"))==NULL)
      {
            printf("Cannot open file strike any key exit!");
            getch();
            exit(1);
      }
     ch=fgetc(fp);
    while (ch != EOF)
      {
      putchar(ch);
      ch=fgetc(fp);
      } //这个过程是进行读数据的测试过程
     //接下来进行写数据
scanf("%s",zeng);
fputs(zeng,fp);

   fclose(fp);



system("pause");
return 0;
}

我想完成文件的读写,我用的window10系统,在F盘建立文件啦啦.txt。想对它通过C语言练习文件读写。上面代码完成了。但是有个问题,就是写数据,最多能写20个字符。我不想用这种方式,因为假如我只写3个字符,就浪费了些空间,写22个字符的话,就溢出了,有没有办法能兼容这两个问题,灵活的写任意长度的字符都没事呢

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 梅花五瓣 2019-10-08 15:31
    已采纳

    这个zeng[]是临时变量,占用的内存在该函数结束时会自动释放
    除非先知道输入的数据的大小然后随时申请空间(malloc),否则只能把20改成一个更大的数据

    已采纳该答案
    打赏 评论
  • Soul fragments 2019-10-08 14:59

    char zeng[20];
    这里【】里的20是设置输入字符的最大长度,超过20个字符的话就会自动去掉后面的,想要多写不溢出的话把20改成更大的数字比如20000就OK了

    打赏 评论
  • 天空那只牛 2019-10-08 17:23

    ...
    {
    FILE *fp;
    char ch;

    fp = fopen("F:\\啦啦.txt", "at+");
    
    
    if ((fp = fopen("F:\\啦啦.txt", "at+")) == NULL)
    {
    printf("Cannot open file strike any key exit!");
    getchar();
    exit(1);
    }
    ch = fgetc(fp);
    while (ch != EOF)
    {
    putchar(ch);
    ch = fgetc(fp);
    
    }
    
     ch = getchar();  //这里回车作为输入结束
     FILE *stream = stdin;
     int stdin_len = strlen(stream->_ptr);
     if (stdin_len > 2)
     {
        fputs(stream->_ptr, fp);    //stream->_ptr 后面会带有\n\n  不需要就开空间复制前面的输入字符串
     }
    fclose(fp);
    system("pause");
    return 0;
    

    }

    打赏 评论

相关推荐 更多相似问题