c語言_文件操作_FILE結構體小解釋


參考文檔來自:https://www.cnblogs.com/haore147/p/3648395.html

我們通過fopen返回一個文件指針(指向FILE結構體的指針)來進行文件操作。

在vs2013下的代碼如下:

#include <stdio.h>
#pragma warning(disable:4996)

int main()
{
    FILE *p = fopen("C:\\test\\win\\a.txt", "r");
    
    char buf[100];
    fgets(buf, sizeof(buf), p);
    printf("%d\n", p->_bufsiz);    //4096    緩沖區大小為4K。
    printf("%d\n", p->_charbuf);  //0

    char * p1 = p->_base;        //指針的基礎位置。
    printf("%s\n", p1);          //輸出的是亂碼。
    
    fclose(p);
    
    return 0;
}

代碼中-->選中FILE后-->右鍵選擇-->轉到定義(G),顯示的代碼如下:

在vs2013下的代碼如下:

#ifndef _FILE_DEFINED
struct _iobuf {     char *_ptr;      //文件輸入的下一個位置。
     int _cnt;    //當前緩沖區的相對位置。 char *_base;    //指針的基礎位置(即是文件的起始位置)。 int _flag;    //文件標志。 int _file;    //文件的有效性驗證。 int _charbuf;   //檢查緩沖區狀況,如果無緩沖區則不讀取。 int _bufsiz;   //緩沖區的大小。 char *_tmpfname;   //臨時文件名。 }; typedef struct _iobuf FILE; #define _FILE_DEFINED #endif  

同理:在vs2017下顯示的代碼如下:

在vs2017下的代碼如下:
#ifndef _FILE_DEFINED
#define _FILE_DEFINED typedef struct _iobuf { void* _Placeholder; } FILE; #endif

不要直接操作fopen返回的文件指針,這個指針只是給c語言庫函數的參數使用的。(因為該指針里面很復雜。)
如果程序員不聽話,直接操作這個指針,可能會帶來很多問題。(除非你特別特別熟悉這個指針。)
原因之一:因為FILE里面的成員在不同的系統是不一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM