目录
fopen
打开文件函数 , 返回一个FILE*类型的指针(文件信息区的地址),打开失败返NULL
打开的文件必须包含在工程目录下,也就是与 .c文件在一个文件里面
两个参数
一个是文件名
一个是打开的方式(以什么样的方式打开这个文件)
返回值:
打开成功返回该指针
失败返回NULL
提供的打开方式
一定要用双引号写,const char * mode 接收的是地址,单引号的那个是一个常量字符(没有地址),而字符串就有。
"w",以写的形式打开一个文件,如果文件里面有内容将会被清空,再写入。
“a”,则不会,在末尾接着写。
fclose
作用:关闭文件,给他传递上被打开文件的 FILE* 类型的指针变量。
fclose 没有置空功能建议关闭文件后,将那个指针变量置为空指针。
返回值:
关闭成功返回0
失败返回EOF
feof
作用:读取文件结束时,检查是否为EOF指示器(判断结束的原因)
返回值:
如果为EOF指示器返回非零值,不是则返回0
fperror
作用:文件读取结束,检查是否为错误指示器(判断结束的原因)
返回值:
如果为错误指示器返回非零值,不是则返回0
fgetc
作用:从文件中获取字符,读取一个,光标跳转到下一个
读取成功,返回相应字符的ASCLL码值(替身为整型),读取失败或者遇见末尾返回
读取失败,返回 EOF(-1) 设置 错误指示器(fperror)可判断
遇见末尾,返回 EOF(-1) 设置流的 EOF 指示符 (feof)判断
参数为文件指针
fputc
作用:将字符写入文件中,一次只能写一个字符
写一个字符文件里面的光标就会自动跳转到后面
int character
int 类型的原因是字符传递的是ASCLL码值,对应的int的类型十进制数 97 ,所以 character 这个变量里存的就是 97
返回值
写的什么字符,就返回什么字符,如果发生错误返回 EOF 并设置错误指示器
字符a++,字符类型的变量在进行运算时会整形提升,也就是对应的ascll计算
'a' +1 ,对应的十进制加一,然后放入 a 中, a 里面就是 98 ,如果以%d打印出来的就是98, %c 以字符的格式进行打印,把 a 的 98 看成一个字符然后打印出来
fputs
作用:把一个字符串写入文件,\0为终止,不会写入\0。
返回值:
写入成功返回非负值
错误返回 EOF(-1),并设置错误指示器。
fgets
返回值:
读取成功返回目标地址,char *str
读取错误返回 NULL,并设置错误指示符(fperror)
遇见文件末尾也返回NULL,并设置EOF指示符(feof)
作用:从文件中读取字符串。有多少读多少包括\n(p里面的字符小于num).
需要注意的参数是 num
num 的意思是,最多读取多少个字符,并且会自动分配一个空间给 \0,所以有效读取字符个数只有 num-1个
代码如下:这是以读的方式打开的,所以先创建一个文件,再读
int main() { FILE* p = fopen("data.txt", "r"); if (p == NULL) { perror("fopen"); return 6; } char arr[20] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; fgets(arr, 10, p); //从p中读取一个长度为10的字符串 fclose(p); p = NULL; return 0; }
fpritnf
按照对应的格式,以文本的形式 写入 目标文件
包含标准流,把 目标文件地址 改成stdout(标准输出流)或者是stdin(标准输入流),
返回值:
成功后,将返回写入的字符总数。
如果发生写入错误,则设置错误指示符 (ferror) 并返回负数。
如果在写入宽字符时发生多字节字符编码错误,则将 errno 设置为 EILSEQ 并返回负数。
fscanf
从文件中读取数据,以相应的格式存储到对应的地址。
fscanf也要取地址本身是地址就不用
标准输入流的应用,在键盘上读取的数组放入目标地址arr
包含标准流,把目标文件地址 改成stdout(标准输出流)或者是stdin(标准输入流),
返回值:
成功后,该函数返回已成功填充的参数列表的项目数。此计数可以与预期的项目数匹配,也可以由于匹配失败、读取错误或文件末尾的到达范围而更少(甚至为零)。
如果发生读取错误或在读取时达到文件末尾,则设置正确的指示器(feof 或 fail)。而且,如果在成功读取任何数据之前发生任何一种情况,则返回 EOF。
如果在解释宽字符时发生编码错误,该函数会将 errno 设置为 EILSEQ。
sprintf
把相应的数据按照相应的格式放入字符数组中
返回值:
成功返回写入分字符总数
失败返回负数
汉字算两个字符,加两个空格一共是10个字符
int main() { char arr[100] = { 0 }; char Name[] = "张伟"; char a = 66;//== B int c = 666; //将 "张伟",66/B,666放入字符串中 int b = sprintf(arr, "%s %c %d", Name, a, c); //然后打印出来 printf("%s\n", arr); printf("%d %c", b, 10); //printf("%zd\n", sizeof(Name)); //再把字符串里的数组拷贝出来 //sscanf(arr, "%s %c %d", Name1, &a1, &c1); //打印 /*printf("%s ", Name1); printf("%c ", a1); printf("%d", c1);*/ return 0; }
如果说%s%c%d这里没有空格那么打印出来也没有,如果有打印出来也有
不只是没有空格这么简单如果 " " 有空格这个空格也会占空间
sscanf and sprintf 合集
int main() { char arr[100] = {0}; char Name[] = "张伟"; char a = 66;//== B int c = 666; char Name1[10] = { 0 }; char a1 = 0; int c1 = 0; //将 "张伟",66/B,666放入字符串中 sprintf(arr, "%s %c % d", Name, a, c); //然后打印出来 printf("%s\n", arr); //再把字符串里的数组拷贝出来 sscanf(arr, "%s %c %d", Name1, &a1, &c1); //打印 printf("%s\n", Name1); printf("%c\n", a1); printf("%d\n", c1); return 0; }
sscanf
把字符串里的东西,按照相应的格式放入右边中。(以%s%d%f,的类型格式解读)
返回值:
成功后,该函数返回已成功填充的参数列表中的项目数。此计数可以与预期的项数匹配,也可以在匹配失败的情况下小于 (甚至零) 。
如果在成功解释任何数据之前输入失败,则返回 EOF。int main() { char arr[100] = { 0 }; char Name[] = "张伟"; char a = 66;//== B int c = 666; //将 "张伟",66/B,666放入字符串中 int b = sprintf(arr, "%s %c %d", Name, a, c); //然后打印出来 printf("%s\n", arr); printf("%d %c", b, 10); //printf("%zd\n", sizeof(Name)); char Name1[10] = { 0 }; char a1 = 0; int c1 = 0; //再把字符串里的数组拷贝出来 int bb =sscanf(arr, "%s %c %d", Name1, &a1, &c1); printf("%d\n", bb); //打印 printf("%s ", Name1); printf("%c ", a1); printf("%d", c1); return 0; }
fwrite
作用,以二进制的形式写入文件
参数1,被写的数组
参数2,每个元素的大小
参数3,你想写的个数
参数4,目标文件
返回值:
返回成功写入的元素总数。
如果此数字与 count 参数不同,则写入错误会阻止函数完成。在这种情况下,将为流设置错误指示器 (ferror)。
如果 size 或 count 为零,则函数返回零,错误指示器保持不变。
size_t 是无符号整数类型。
fread
作用:以二进制形式读取文件里面的的数组。
返回值:
返回成功读取的元素总数。
如果此数字与 count 参数不同,则表示读取时发生读取错误或达到文件末尾。在这两种情况下,都设置了正确的指示器,可以分别使用 ferror 和 feof 进行检查。
如果 size 或 count 为零,则函数返回零,并且 ptr 指向的流状态和内容都保持不变。
size_t 是无符号整数类型。
fseek
修改文件光标位置,(如果读或写了一个数据,那么光标会自动跳转到下一个位置)
三个参数
1、文件的地低。
2、偏移量(可为负)。
3、光标的起始位置,三个选项
seek_set : 文件起始位置
seek_cur : 光标当前位置
seek_end : 文件末尾
返回值:
如果成功,该函数返回零。
否则,它将返回非零值。
如果发生读写错误,则设置错误指示器 (ferror)。
ftell
作用: 返回偏移量,当前光标位置与起始的之差。
fwind
回到起始地址