程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c語言-C語言標准庫fwrite失敗,代碼已給出,求幫助。

c語言-C語言標准庫fwrite失敗,代碼已給出,求幫助。

編輯:編程解疑
C語言標准庫fwrite失敗,代碼已給出,求幫助。

代碼:


#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

void main()
{
    FILE* fp = fopen("aaa.txt", "rb+");

    if (fp == NULL) {
        return;
    }

    if (_fseeki64(fp, 0, SEEK_END) != 0) {
        return;
    }

    long long size = _ftelli64(fp);

    if (size < 0) {
        return;
    }

    if (_fseeki64(fp, 0, SEEK_SET) != 0) {
        return;
    }

    char buf[1024];

    if (fread(buf, 20, 1, fp) != 1) {
        return;
    }

    if (fwrite("test", 5, 1, fp) != 1) {
        return;
    }

    fclose(fp);
}

aaa.txt的內容(剛好20個字節):

aaaaaaaaaaaaaaaaaaaa

vc2010和vc2015結果都一樣,在fwrite那裡出錯。期望fwrite返回1,實際返回0。errno為0。

實在想不出原因,請教一下大家。多謝幫忙。

最佳回答:


好了終於找到原因了。參見資料:http://stackoverflow.com/questions/23843587/fwrite-doesnt-work-directly-after-fread
fread之後不能直接用fwrite,反過來也一樣。必須先調用一次fseek才行,而且要注意fseek的_Origin這個參數要是SEEK_SET或者SEEK_END,不能用SEEK_CUR。
這麼牛逼的設定,C標准庫的文檔中居然沒有提到半個字,出錯了得到的errno還是0。害我調了2個多小時。真是見鬼了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved