C语言中读写交替时出现的问题分析

总结

 1. 读写命令交替,一定要使用fseek重新定位,否则出现输入显示混乱
 2. a追加写入,不能读;a+:只能追加写入,可读取全部
 3. a相关模式不能修改原始数据文本,而r+可以修改原始文本
 4. 写入的文本,不论是字符还是字符串,最后是有自动添加的,个人根据现象理解的

“+”模式添加的不同

#include <stdio.h>
#include <stdlib.h>

int main(void){
	FILE *fp;
	char b;
	//每次测试保证txt文件中只"有123456"这6个字符;
	fp=fopen("file.txt","a+");   //只仅仅修改这里的模式为a+和a,和保证txt开始文本只有123456
	rewind(fp);  //指针在文件开始
	b = fgetc(fp);
	printf("第一次读:%c
",b);
	fseek(fp,2,0);
	printf("第二次读:%c
",fgetc(fp));
	fseek(fp,2,0);
	fputs("sag",fp);
	printf("第三次读:%c
",fgetc(fp));

	fclose(fp);
	system("type file.txt ");  //只是在cmd窗口显示文本内容,懒得每次打开txt查看
	printf("
");
	system("pause");	
	return 0;
}

显示结果a+和a对比分析:

a模式没有读取数据的功能,但能写入,a+模式有读写的功能,但写指针和读指针不是同一位置,而且写文本时会同时移动两个指针,但会一直在文档结尾追加

在这里插入图片描述

a+可读写的文件出现的问题

一次写入命令后,若不定位指针,那么紧接着的读取命令也会写入;a+模式下,文档最后写入了6。因此,需要注意每次读取和写入文本命令转换时重新使用feek(fp,n,0)定位

在这里插入图片描述

每个+(r+为例)模式下,读写交替,不重新fseek出现的问题

读和写命令转换时也会出现问题,

#include <stdio.h>
#include <stdlib.h>

int main(void){
	FILE *fp;
	char a[4],b;

	fp=fopen("file.txt","r+");
	rewind(fp);
	b = fgetc(fp);
	printf("第一次读:%c
",b);
	fseek(fp,2,0);
	printf("第二次读:%c
",fgetc(fp));
	fseek(fp,1,0);
	fputs("sa",fp);
	//fseek(fp,2,0);
	printf("第三次读:%c
",fgetc(fp));

	fclose(fp);
	system("type file.txt ");
	printf("
");
	system("pause");	
	return 0;
}

在这里插入图片描述

到此这篇关于C语言中读写交替时出现的问题问题的文章就介绍到这了,更多相关c语言读写交替内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

原文地址:https://blog.csdn.net/weixin_43794311/article/details/128198672