chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言-fseek不起作用寫操作定位無(wú)效簡(jiǎn)析

嵌入式那些事 ? 來(lái)源:嵌入式那些事 ? 2023-05-04 09:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

情況說(shuō)明

最近在寫一個(gè)操作文件的函數(shù),使用fseek()函數(shù)定位到文件某個(gè)位置,然后用fwrite()重新更新該位置的內(nèi)容,發(fā)現(xiàn)該位置處的內(nèi)容并沒有更新,反而更新的內(nèi)容竟然出現(xiàn)在了文件末尾,真的是不知道什么情況。

問(wèn)題復(fù)現(xiàn)

下面先簡(jiǎn)單復(fù)現(xiàn)我所遇到的問(wèn)題吧,示例代碼如下:

/*
*By:AilsonJack
*Date:2019.01.24
*Blog:www.only2fire.com
*Des:fseek測(cè)試
*/

#include

intmain(void)
{
char*fileName="test.txt";
charch='W';
FILE*fp=NULL;
intiRet=0;

fp=fopen(fileName,"a+");
if(!fp)
{
printf("open%sfailed!
",fileName);
return-1;
}

iRet=fseek(fp,0,SEEK_SET);/*定位指針到文件頭*/
if(iRet

將上述代碼編譯,然后在編譯輸出文件所在的文件夾中創(chuàng)建一個(gè)test.txt文件,內(nèi)容為:

123456789abcdef

cda0ac38-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185403

cdb32fd4-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185449

接著運(yùn)行程序,打開test.txt,可以看到內(nèi)容(字符W)被寫到文件的末尾了:

cdbcb392-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185803

cdd3f9d0-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_185815

原因分析

這是什么情況,明明使用fseek定位到文件的開頭了,但是實(shí)際卻寫入到了文件末尾,好吧,當(dāng)時(shí)我也是挺困惑的,難道是寫fseek()接口函數(shù)的哥們還遺留有什么bug。后來(lái)上網(wǎng)查證,發(fā)現(xiàn)這是我們打開文件的所使用的模式"a+"在作怪。下面看看對(duì)該模式的描述,直接在終端輸入:man fopen:

cde31032-e87f-11ed-ab56-dac502259ad0.png

2019-01-24_190507

其中對(duì)fopen()函數(shù)涉及的a與a+模式的描述如下:

a:Open for appending (writing at end of file). The file is created if it does not exist. The stream is positioned at the end of the file.

a+:Open for reading and appending (writing at end of file). The file is created if it does not exist. The initial file position for reading is at the beginning of the file, but output is always appended to the end of the file.

上述對(duì)a與a+模式的描述大致內(nèi)容是:打開一個(gè)文件,如果該文件不存在將創(chuàng)建文件,初始化的文件讀指針位于文件的開頭;對(duì)于文件的寫操作,則始終將寫入內(nèi)容追加到文件的末尾,與文件指針沒有關(guān)系。

想必看到這里,大家也明白了。如果想使用fseek()函數(shù)定位寫操作指針,那么就修改fopen()涉及的模式,這里修改為"r+",就能實(shí)現(xiàn)將內(nèi)容寫到文件的開始了,對(duì)于自己的程序大家還是根據(jù)實(shí)際情況修改為相應(yīng)的模式。

ce01b1e0-e87f-11ed-ab56-dac502259ad0.png






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7642

    瀏覽量

    144528

原文標(biāo)題:C語(yǔ)言-fseek不起作用,寫操作定位無(wú)效

文章出處:【微信號(hào):嵌入式那些事,微信公眾號(hào):嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TC387不起作用的原因?

    我使用的是 TC387。當(dāng)我使用 Trace32 下載 *.elf 文件時(shí),它運(yùn)行良好。但是我使用 Trace32 下載了*.hex 文件,但它不起作用。即使我使用 Trace32 下載 *.elf
    發(fā)表于 02-27 08:02

    IAP中斷向量不起作用

    致力于STM32F051。 引導(dǎo)加載程序工作正常,但即使將向量表定位到SRAM后,應(yīng)用程序文件中的中斷向量也不起作用。 任何解決方案將不勝感激。以上來(lái)自于谷歌翻譯以下為原文 Working
    發(fā)表于 11-27 15:56

    示例固件不起作用

    示例固件不起作用?以上來(lái)自于谷歌翻譯以下為原文 Sample firmware not working?
    發(fā)表于 04-08 16:38

    程序不起作用

    已經(jīng)改為更高版本。我遇到的問(wèn)題是用戶必須在使用程序之前通過(guò)VEE中的.NET程序集參考菜單重新加載較新的DLL。沒有它,該程序不起作用(因?yàn)樗?b class='flag-5'>C:\ Program Files \ Agilent
    發(fā)表于 04-22 13:56

    按鍵掃描程序不起作用

    ,結(jié)果也是WK_UP無(wú)效,也是不管按下不按下,都不起作用,我用萬(wàn)用表測(cè)試了這個(gè)按鍵,這個(gè)按鍵完好,就不知道問(wèn)題出在哪里?是不是板子電路的問(wèn)題,求救!??!
    發(fā)表于 05-20 04:35

    FX3 DVK板讀取操作不起作用

    嗨,我用的是FX3 DVK板。我想使用GPIF II作為主模式。操作良好。讀取操作不起作用。在DMA事件上不調(diào)用回調(diào)函數(shù)。你能解決這個(gè)問(wèn)題嗎?請(qǐng)檢查附件。問(wèn)候JW郵編1.8兆字節(jié)
    發(fā)表于 05-20 15:07

    使用LabVIEW VISA例程讀寫操作不起作用

    的讀寫操作不起作用。有什么不同? 以上來(lái)自于谷歌翻譯 以下為原文I'm trying to use an E5810 with an Anritsu ME522A bit error
    發(fā)表于 08-01 08:37

    能量收集不起作用

    你好, 我從核L476RG,MEMS和NFC02A1開始。我嘗試將MEMS數(shù)據(jù)寫入nfc標(biāo)簽及其工作。我的問(wèn)題是當(dāng)我嘗試使用能量收集模式時(shí),它不起作用,我不知道為什么。我在nfc多維數(shù)據(jù)集中使用這個(gè)
    發(fā)表于 08-01 10:58

    如何解決串口接收中斷不起作用的問(wèn)題?

    如何解決串口接收中斷不起作用的問(wèn)題?
    發(fā)表于 12-09 07:38

    mcp3421 18不起作用是怎么回事?

    =i2c.read() cifra3=i2c.read() i2c.end() 打印 cifra1 打印 cifra2 打印cifra3 結(jié)束 i2c.write(28
    發(fā)表于 04-26 08:02

    Freemaster記錄器不起作用怎么解決?

    我創(chuàng)建了一個(gè)記錄器,但它不起作用。出現(xiàn)錯(cuò)誤 0x80000081(無(wú)效命令)。我還添加了 FMSTR_Recorder(0)。
    發(fā)表于 05-18 07:40

    模型不起作用時(shí)的解決辦法

    你的團(tuán)隊(duì)幾個(gè)月來(lái)一直在收集數(shù)據(jù)、構(gòu)建預(yù)測(cè)模型、創(chuàng)建用戶界面,并與一些早期的用戶一起部署新的機(jī)器學(xué)習(xí)產(chǎn)品。但你現(xiàn)在聽到的并不是大家一起慶祝項(xiàng)目勝利的聲音,而是聽到產(chǎn)品經(jīng)理對(duì)那些早期用戶的抱怨,這些早期用戶對(duì)模型精度不滿意并開始認(rèn)為“模型不起作用”。所以你現(xiàn)在應(yīng)該做什么?
    的頭像 發(fā)表于 05-04 09:54 ?3525次閱讀

    時(shí)控開關(guān)為什么不起作用,其中的原因是什么

    時(shí)控開關(guān)不起作用:簡(jiǎn)單解釋就是時(shí)控開關(guān)設(shè)置好了定時(shí)時(shí)間,但是到時(shí)間不工作,是怎么回事? 目前時(shí)控開關(guān)分為兩種:按鍵式時(shí)控開關(guān)和藍(lán)牙時(shí)控開關(guān),咱們分開來(lái)講解: 按鍵式時(shí)控開關(guān)不工作原因:1.校時(shí)(時(shí)間
    發(fā)表于 01-07 15:06 ?2.4w次閱讀

    解決西門子觸摸屏變量的數(shù)值更改事件有時(shí)不起作用

    為什么西門子觸摸屏變量的數(shù)值更改事件,有時(shí)不起作用。是因?yàn)椴杉J經(jīng)]有選擇,在菜單欄里右鍵屬性,勾上采集模式,然后選擇循環(huán)連續(xù)。
    的頭像 發(fā)表于 11-08 17:22 ?8973次閱讀

    KT142C語(yǔ)音芯片配置文件總是不起作用?配置文件的問(wèn)題集中歸納

    KT142C語(yǔ)音芯片配置文件總是不起作用?配置文件的問(wèn)題集中歸納
    的頭像 發(fā)表于 10-20 15:04 ?1310次閱讀
    KT142<b class='flag-5'>C</b>語(yǔ)音芯片配置文件總是<b class='flag-5'>不起作用</b>?配置文件的問(wèn)題集中歸納