C语言中操作文件-向文件读写一个字符串-学习笔记-62

引入

前面我们学习了如何向文件写入一个字符,以及读取一个字符串,但是这太反常识了,有没有方便读写一个字符串的方法呢?当然是有的!😎

读写字符串的函数

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);

作用是从文件读入一个字符串到字符数组

1
2
fgets(str, n, fp);
//读取一个文件中的字符串给字符数组

其中:

  • fp:指向文件信息区的指针;
  • str:字符数组,获取的字符串赋值给这个数组
  • n:获取长度,记住职能获取 n-1 位,剩下的那一位要给\0

如果在读取 n 个字符过程中,遇到 \n 换行符,或文件结束符 EOF ,读入即结束。(不管读没读到 n 位)

返回 str 字符数组首元素地址

fputs 函数

一般形式

int fputs(char str , FILE fp);

将 str 所指向的字符串输出到 fp 所指向的文件中。

1
2
fputs("Bliner", fp);
//把 Bliner 输出到 fp 所指向的文件中

fputs 函数的第一个参数可以是

  • 字符串
  • 字符数组
  • 字符型指针

结尾的\0不输出,输出后:

  • 成功,返回0
  • 失败,返回 EOF

其实 fgets 和 fputs 和之前学习的 gets 和 puts 很像,只不过前者针对的是磁盘文件,后者是终端显示。

举个例子

从键盘输入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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会读入到程序中。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!