C語言中讀寫交替時(shí)出現(xiàn)的問題分析
總結(jié)
1. 讀寫命令交替,一定要使用fseek重新定位,否則出現(xiàn)輸入顯示混亂
2. a追加寫入,不能讀;a+:只能追加寫入,可讀取全部
3. a相關(guān)模式不能修改原始數(shù)據(jù)文本,而r+可以修改原始文本
4. 寫入的文本,不論是字符還是字符串,最后是有自動(dòng)添加的\0,個(gè)人根據(jù)現(xiàn)象理解的
“+”模式添加的不同
#include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp; char b; //每次測試保證txt文件中只"有123456"這6個(gè)字符; 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窗口顯示文本內(nèi)容,懶得每次打開txt查看 printf("\n"); system("pause"); return 0; }
顯示結(jié)果a+和a對(duì)比分析:
a模式?jīng)]有讀取數(shù)據(jù)的功能,但能寫入,a+模式有讀寫的功能,但寫指針和讀指針不是同一位置,而且寫文本時(shí)會(huì)同時(shí)移動(dòng)兩個(gè)指針,但會(huì)一直在文檔結(jié)尾追加
a+可讀寫的文件出現(xiàn)的問題
一次寫入命令后,若不定位指針,那么緊接著的讀取命令也會(huì)寫入;a+模式下,文檔最后寫入了6。因此,需要注意每次讀取和寫入文本命令轉(zhuǎn)換時(shí)重新使用feek(fp,n,0)
定位
每個(gè)+(r+為例)模式下,讀寫交替,不重新fseek出現(xiàn)的問題
讀和寫命令轉(zhuǎn)換時(shí)也會(huì)出現(xiàn)問題,
#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; }
到此這篇關(guān)于C語言中讀寫交替時(shí)出現(xiàn)的問題問題的文章就介紹到這了,更多相關(guān)c語言讀寫交替內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?protobuf中對(duì)不同消息內(nèi)容進(jìn)行賦值的方式總結(jié)(set_、set_allocated_、mutable_、
這篇文章主要給大家介紹了關(guān)于C++?protobuf中對(duì)不同消息內(nèi)容進(jìn)行賦值的方式總結(jié),主要使用的是set_、set_allocated_、mutable_、add_,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03C++編程中的數(shù)據(jù)類型和常量學(xué)習(xí)教程
這篇文章主要介紹了C++編程中的數(shù)據(jù)類型和常量學(xué)習(xí)教程,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09在Centos7中使用vscode和gdb調(diào)試PG插件的方法
這篇文章主要介紹了在Centos7中使用vscode和gdb調(diào)試PG插件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09c++中深淺拷貝以及寫時(shí)拷貝的實(shí)現(xiàn)示例代碼
這篇文章主要給大家介紹了關(guān)于c++中深淺拷貝以及寫時(shí)拷貝實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08C語言實(shí)現(xiàn)手寫Map(全功能)的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)手寫Map(全功能),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下2022-08-08C語言中結(jié)構(gòu)體偏移及結(jié)構(gòu)體成員變量訪問方式的問題討論
這篇文章主要介紹了C語言中結(jié)構(gòu)體偏移及結(jié)構(gòu)體成員變量訪問方式的問題討論,幫助大家理解struct的成員變量偏移,需要的朋友可以參考下2016-05-05