#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;
}