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

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

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

MAR-Sky   2022-12-06 我要评论

总结

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

“+”模式添加的不同

#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\n",b);
	fseek(fp,2,0);
	printf("第二次读:%c\n",fgetc(fp));
	fseek(fp,2,0);
	fputs("sag",fp);
	printf("第三次读:%c\n",fgetc(fp));

	fclose(fp);
	system("type file.txt ");  //只是在cmd窗口显示文本内容,懒得每次打开txt查看
	printf("\n");
	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\n",b);
	fseek(fp,2,0);
	printf("第二次读:%c\n",fgetc(fp));
	fseek(fp,1,0);
	fputs("sa",fp);
	//fseek(fp,2,0);
	printf("第三次读:%c\n",fgetc(fp));

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

在这里插入图片描述

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们