这是一个关于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个字符的话,就溢出了,有没有办法能兼容这两个问题,灵活的写任意长度的字符都没事呢

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

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

...
{
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;

}