fread()/fwrite(): 他们可以进行二进制文件的读写.
数组初始化时长度不能放变量 (例a【n】 ={})
int a = 2 ;
vim -t size_t
读:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr
所在的本地内存中。
参数:
ptr 要存储数据的本地内存一般是数组或者结构体指针
size 单个数据块的元数据大小。最小单元的大小
nmemb 要获取的数据块的个数,拷贝的数据块个数。
stream 要获取数据的源文件流对象,如果是stdin表示从
键盘获取数据,如果是fp文件则表示从普通文件获取。
返回值:
成功 :返回实际获取数据的次数。
失败 0
写:
size_t fwrite(const void *ptr, size_t size,size_t nmemb, FILE *stream);
功能:
从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应
的文件流对象中。
参数:ptr 要写的数据块地址,一般是数组或者结构体指针
size 要写的数据块元数据大小,单位是字节
nmemb 要写的数据块的个数
stream 要写的目标文件流对象。如果是stdout则表示数据会
写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。
返回值:成功 写入的个数。
失败 0
文件定位函数fseek(),ftell(),frewind()
1.fseek
int fseek(FILE *stream, long offset, int whence);//long -->signed long
功能:
将stream流文件中的文件指针
从whence位置开始
偏移offset字节的长度。
参数:
stream 要移动文件指针的目标文件流对象。
注意:不支持设备文件,一般用于普通文件。
offset
要在文件内偏移的距离,单位字节。
如果值为整数,则向文件末尾偏移
如果值为负数,则向文件开头偏移
whence 偏移的起始位置,由系统定义的三个宏开始。
SEEK_SET 文件的开头位置 offset 只能是正值
SEEK_CUR 文件的当前位置 offset 可正 可负
但是
如果当前位置与 SEEK_SET重合 offset 不能是负的
SEEK_END 文件的末尾位置 offset 可正 可负
正 --- 空洞文件
返回值:
成功: 返回 0
失败: -1;
eg:
fseek(fp,100,SEEK_SET); //从头开始往后偏移100个字节
fseek(fp,-100,SEEK_SET);//错误的越界
如果从文件的指定位置向后偏移过程中已经超过了文件
的当前末尾位置,则会自动以'\0'来填充文件内容,从
而形成一种被称为"空洞文件" 的特殊文件。
产生空洞文件的操作:
1.进行偏移
2.做一次写操作
fputc(0,fp);
用途:
提前抢占磁盘空间
下载时可以看是否内存够用
2. ftell
long ftell(FILE *stream);
功能:获取文件位置指示器的偏移量
参数:求偏移量的文件流指针
返回值:文件位置指示器到文件开头的偏移字节数
3. rewind(fp);
void rewind(FILE *stream)
功能:复位流指针到开头
参数:流
返回值:void
rewind() 等效于:
fseek(stream,0,SEEK_SET);
格式化输入输出
1.fprintf
2.sprintf
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
功能:将格式化的字符串写入文件
把stream变为 stdout 就等价于printf
int sprintf(char *str, const char *format, ...);
功能:将格式化的字符串写入数组
所以可以传两个字符串拼接起来,放到str里完成字符串的拼接
或者传整形的到“”里,就会转换为字符串型
fscanf
sscanf
time,ctime,localtime
分割字符串
char *strtok(char *str,const char *delim)
功能:分割字符串
参数:
str:需要分割的字符串
delim:分隔符(到哪里分开)
返回值
成功:返回分割后的首地址
失败:NULL
那分开后的后部分在哪里呢
再分一次就好了,例如下
har buff[] = {"abate v. make or become less\r\n"};
char *p = strtok(buff, " ");
if (p != NULL)
{
printf("p : %s\n", p);
}
p = strtok(NULL, "\r\n");
if (p != NULL)
{
printf("p = %s\n", p);
}