C语言和指针-回顾18-I/O函数

I/O函数以3种基本形式处理数据:单个字符,文本行,二进制数据。

 

 

 

 

 

fscanf()

 

int fseek(FILE *stream, long offset, int from)

 

在二进制流中,

从SEEK_END进行定位可能不被支持。

在文本流中,

如果from是SEEK_CUR或者SEEK_END,offset必须是0。

如果from是SEEK_SET,offset必须是同一个流ftell()返回值。

文本流有这些限制的原因是:

由于文本流所执行的行末字符映射,文本文件的字节数肯能和程序写入的字节数不同。

 

fclose()

如果对fclose()的返回值不进行检查,会出现什么问题呢?

如果fclose()出错,那很有可能你写的程序有问题,比如说传给fclose()的参数是不对的。这样有可能会出现,真正fopen的流没有释放掉。

每个进程能够打开的流的个数是有限的,如果一直打开流但是关闭流一直失败的话,后面这个进程就没有办法再打开流了。

 

sprintf()

sprintf(buffer, "%d %c %x"); 如果整数的长度是2个字节。那么buffer应该多大?

%d : 两个字节整数的范围-32768~ 32767,或者0 ~ 65535,所以最长需要6个字节(-32768)

%c : 一个字节

%x : FFFF, 两个字节

两个空格:两个字节

结尾NUL : 一个字节

6 + 1 + 4 + 2 + 1 = 14个字节

 

fopen()

不希望文件原先的内容丢失,也希望能够写入文件的任何位置,那应该r+模式打开文件。

 

posted @ 2021-07-06 08:40  Erden  阅读(56)  评论(0编辑  收藏  举报