引入
前面我们学习了如何向文件写入一个字符,以及读取一个字符串,但是这太反常识了,有没有方便读写一个字符串的方法呢?当然是有的!😎
读写字符串的函数
C 语言允许通过函数 fgets 和 fputs 一次读写一个字符串
| 函数名 | 调用形式 | 功能 | 返回值 |
|---|---|---|---|
| fgets | fgets(str,n,fp) | 从 fp 指向的文件中,读取一个长度位 n-1 的字符串,存放到字符数组 str 中。 | 成功则返回str 的地址,失败则返回 NULL |
| fputs | fputs(str,fp) | 把 str 所指向的字符串写到文件指针变量 fp 中 | 成功为0,失败为非0 |
fgets 函数
一般形式
char fgets (char str , int n , FILE *fp);
作用是从文件读入一个字符串到字符数组
fgets(str, n, fp);
//读取一个文件中的字符串给字符数组
其中:
- **fp:**指向文件信息区的指针;
- **str:**字符数组,获取的字符串赋值给这个数组
- **n:**获取长度,记住职能获取 n-1 位,剩下的那一位要给\0
如果在读取 n 个字符过程中,遇到 \n 换行符,或文件结束符 EOF ,读入即结束。(不管读没读到 n 位)
返回 str 字符数组首元素地址
fputs 函数
一般形式
int fputs(char str , FILE fp);
将 str 所指向的字符串输出到 fp 所指向的文件中。
fputs("Bliner", fp);
//把 Bliner 输出到 fp 所指向的文件中
fputs 函数的第一个参数可以是
- 字符串
- 字符数组
- 字符型指针
结尾的\0不输出,输出后:
- 成功,返回0
- 失败,返回 EOF
其实 fgets 和 fputs 和之前学习的 gets 和 puts 很像,只不过前者针对的是磁盘文件,后者是终端显示。
举个例子
从键盘输入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
void compare(char (*p)[10]);
char comstr[3][10];
for(int i=0;i<3;i++){
scanf("%s",comstr[i]);
}
compare(comstr);
for(int i=0;i<3;i++){
printf("%s\n",comstr[i]);
}
return 0;
}
void compare(char (*p)[10]){
char temp[10];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(strcmp(p[i],p[j])<0){
strcpy(temp,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],temp);
}
}
}
}
解释
- 我们在打开文件的时候,直接指定了地址,我们的地址是直接用字符串常量显示的。注意,如果是 windows 系统,在写\的时候,记得写成\,因为单独的\出现是转义符。
- 向磁盘输出内容的时候,是不包括换行符的,所以,我们要手动输入一个换行符。
fputs("\n",fp)
注意
如果使用 fgets 函数读入上面的内容时,因为每一行后面都有\n ,所以遇到\n就会自动结束读入,但是\n会读入到程序中。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。
评论