一、fgets和fputs:
1.fgets:遇到\n会立即停止;
函数原型:char *fgets(char *s, int size, FILE *stream);
返回值:成功返回存放字符串空间的首地址,失败或读到末尾返回NULL;
2.fputs:
函数原型: int fputs(const char *s, FILE *stream);
返回值: 成功返回非负数,失败返回EOF;
二、普通文件的分类:
1.ASCII码文件:文件中的内容均为能够在界面上显示的字符;
如:程序、代码、文档
2.二进制文件:文件的内容可以是不能再界面上显示的字节编码;
如:图片、视频、音频、压缩包;
注意:ASCII码文件是特殊的二进制文件;
fputc/fgetc、fprintf/fscanf、fputs/fgets ----->ASCII码文件
fwrite/fread----------------------------------------->二进制文件
三、fwrite和fread函数
fwrite; size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
向文件中写入nmemb个对象,每个对象size个字节大小,存放在ptr指向的空间中
参数:
ptr:存放数据空间首地址
size:写入对象的大小
nmemb:写入对象的个数
返回值:
成功返回实际写入对象的个数
fread函数:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中
参数:
ptr:存放数据空间首地址
size:读取对象的大小
nemb:读取对象的个数
stream:文件流指针
返回值:
成功返回实际读到对象的个数
失败返回读到文件末尾返回0
四、设置流的偏移量:
1.fseek
int fseek(FILE *stream, long offset, int whence);
功能:
重新设置流的偏移量
参数:
stream:文件流指针
offset:
偏移量
>0 向后偏移
<0 向前偏移
whence:
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件末尾
返回值:
成功返回0
失败返回-1
2.rewind
void rewind(FILE *stream);
将流重定位到开头
等价于
fseek(stream, 0, SEEK_SET);
3.ftell
long ftell(FILE *stream);
获得流当前的偏移量
五、问题:
1.gets和scanf函数那个接受字符串会受到空格影响?
scanf:接受字符串会在空格处停止,gets接受字符串不会在空格处停止,因为空格也是一种字符;
2.size_t类型到底是什么?
size_t:在32位系统中,通常被定义为unsigned int;
size_t:在64位系统中,通常被定义为unsigned long;
3.如何定义一个可变大小的数组?
可以使用malloc借取不同的内存空间;
4.使用流的偏移量可以改变某一个位置的值(对该位置原来的值进行覆盖)
5.linux操作系统下如何判断自己编写的程序运行后复制的两个文件是否相等?
可以下载一个beyondcompare工具进行比较;