首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C的FILE结构体解决方法

2013-11-11 
关于C的FILE结构体今天调试程序的时候看了一下FILE结构体的成员_ptr_cnt_base_flag_file_charbuf_bufsize_

关于C的FILE结构体
今天调试程序的时候看了一下FILE结构体的成员
_ptr
_cnt
_base
_flag
_file
_charbuf
_bufsize
_tmpfname
我定义了一个FILE *fin=fopen("input.txt","r");
发现_ptr值的前几位是我的文件里的值,后面全部是屯屯屯;
定义一个FILE *fout=fopen("output.txt,"w");
发现_ptr全部是屯屯屯,在进行了数据的写出后仍全是屯屯屯。
但是我的文件的读写是成功的。
求大神解释一下这个问题。
最好能告诉我FILE结构体各个成员分别表示什么意思,
取值有什么含义(比如_flag=1代表什么意思)。
[解决办法]
屯屯屯。。一般都是未初始化的缘故,还有那个啥烫烫烫烫烫烫。。。。

struct   _iobuf   { 
         char   *_ptr;                  //文件输入的下一个位置 
         int       _cnt;                //当前缓冲区的相对位置 
         char   *_base;                 //指基础位置(应该是文件的其始位置) 
         int       _flag;               //文件标志 
         int       _file;              //文件的有效性验证 
         int       _charbuf;           //检查缓冲区状况,如果无缓冲区则不读取 
         int       _bufsiz;            //文件的大小 
         char   *_tmpfname;            //临时文件名 
}; 
typedef   struct   _iobuf   FILE;
[解决办法]
 char   *_ptr;                  //文件输入的下一个位置 

你既然知道这个结构体的具体意思, 怎么就不仔细看呢?

明明说了是"下一个位置", 那肯定是看不到你才写入的东西的.

但是, 如果你打开一个已经写入了很多东西的文件, 这个指针应该是有文件内容的.

fopen是一个库函数, 并不是API
fopen封装了API, 并且_ptr指向的是一个文件缓冲区而不是一个字符串,虽然是char*类型, 只是为了按1字节计算,定义成char*.  所以这个指针指向的内容并不一定有\0结尾, 但调试的时候,调试器中显示是把char*看作串的给你显示, 所以就会看到乱码了.
就跟你自己申请的一个char数组, 但是不给它放\0结尾, 效果是一样的.

热点排行