C语言 以字符串的形式读写文件详解及示例代码_C 语言

fgetc() 和 fputc() 函数每次只能读写一个字符,速度较慢;实际开发中往往是每次读写一个字符串或者一个数据块,这样能明显提高效率。

读字符串函数fgets

fgets() 函数用来从指定的文件中读取一个字符串,并保存到字符数组中,它的原型为:

char *fgets ( char *str, int n, FILE *fp );

str 为字符数组,n 为要读取的字符数目,fp 为文件指针。

返回值:读取成功时返回字符数组首地址,也即 str;读取失败时返回 NULL;如果开始读取时文件内部指针已经指向了文件末尾,那么将读取不到任何字符,也返回 NULL。

注意,读取到的字符串会在末尾自动添加 '\0',n 个字符也包括 '\0'。也就是说,实际只读取到了 n-1 个字符,如果希望读取 100 个字符,n 的值应该为 101。例如:

#define N 101
char str[N];
FILE *fp = fopen("D:\\demo.txt", "r");
fgets(str, N, fp);

表示从 D:\\demo.txt 中读取100个字符,并保存到字符数组str中。

需要重点说明的是,在读取到 n-1 个字符之前如果出现了换行,或者读到了文件末尾,则读取结束。这就意味着,不管n的值多大,fgets() 最多只能读取一行数据,不能跨行。在C语言中,没有按行读取文件的函数,我们可以借助 fgets(),将n的值设置地足够大,每次就可以读取到一行数据。

【示例】一行一行地读取文件。

#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(){
  FILE *fp;
  char str[N+1];
  if( (fp=fopen("d:\\demo.txt","rt")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }

  while(fgets(str, N, fp) != NULL){
    printf("%s", str);
  }
  fclose(fp);
  system("pause");
  return 0;
}

将下面的内容复制到 D:\\demo.txt:

C语言中文网
http://c.biancheng.net
一个学习编程的好网站!

那么运行结果为:

fgets() 遇到换行时,会将换行符一并读取到当前字符串。该示例的输出结果之所以和 demo.txt 保持一致,该换行的地方换行,就是因为 fgets() 能够读取到换行符。而 gets() 不一样,它会忽略换行符。

写字符串函数fputs

fputs() 函数用来向指定的文件写入一个字符串,它的原型为:

int fputs( char *str, FILE *fp );

str 为要写入的字符串,fp 为文件指针。写入成功返回非负数,失败返回EOF。例如:

char *str = "http://c.biancheng.net";
FILE *fp = fopen("D:\\demo.txt", "at+");
fputs(str, fp);

表示把把字符串 str 写入到 D:\\demo.txt 文件中。

【示例】向上例中建立的 d:\\demo.txt 文件中追加一个字符串。

#include<stdio.h>
int main(){
  FILE *fp;
  char str[102] = {0}, strTemp[100];
  if( (fp=fopen("D:\\demo.txt", "at+")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }
  printf("Input a string:");
  gets(strTemp);
  strcat(str, "\n");
  strcat(str, strTemp);
  fputs(str, fp);
  fclose(fp);
  return 0;
}

运行程序,输入C C++ Java Linux Shell,打开 D:\\demo.txt,文件内容为:

C语言中文网
http://c.biancheng.net
一个学习编程的好网站!
C C++ Java Linux Shell

以上就是 C语言字符串的形式读取文件,后续继续整理相关资料,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
, 读写文件
字符串读写文件
c语言代码示例、c语言循环语句示例、mongoose c语言示例、c语言程序示例、c语言 protobuf 示例,以便于您获取更多的相关知识。

时间: 2024-09-17 16:19:17

C语言 以字符串的形式读写文件详解及示例代码_C 语言的相关文章

C语言 以字符形式读写文件详解及示例代码_C 语言

在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符.主要使用两个函数:fgetc()和fputc(). 字符读取函数 fgetc fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符.它的原型为: int fgetc (FILE *fp); fp 为文件指针.fgetc() 读取成功时返回读取到的字符,

C语言 以数据块的形式读写文件详解及实现代码_C 语言

fgets() 有局限性,每次最多只能从文件中读取一行内容,因为 fgets 遇到换行符就结束读取.如果希望读取多行内容,需要使用 fread 函数:相应地写入函数为 fwrite. fread() 函数用来从指定文件中读取块数据.所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制.fread() 的原型为: size_t fread ( void *ptr, size_t size, size_t count, FILE *fp ); fwri

C语言 文件的打开与关闭详解及示例代码_C 语言

在C语言中,文件操作都是由库函数来完成的,这节介绍文件的打开和关闭. 文件的打开(fopen函数) fopen() 函数用来打开一个文件,它的原型为: FILE *fopen(char *filename, char *mode); filename为文件名(包括文件路径),mode为打开方式,它们都是字符串.fopen() 会获取文件信息,包括文件名.文件状态.当前读写位置等,并将这些信息保存到一个FILE类型的结构体变量中,然后将该变量的地址返回. FILE是在stdio.h头文件中定义的一

C语言 共用体(Union)详解及示例代码_C 语言

通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为: union 共用体名{     成员列表 }; 共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意. 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响:而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员. 结构体占用的内存大于等于所有成员占用的内

C语言 字符串指针详解及示例代码_C 语言

C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在<C语言字符数组和字符串>中已经进行了详细讲解,这里不妨再来演示一下: #include <stdio.h> int main(){ char str[] = "http://c.biancheng.net"; int len = strlen(str), i; //直接输出字符串 printf("%s\n", str); //每次输出一个字符 for(i=0; i<

C语言 常量详解及示例代码_C 语言

C 常量 常量是固定值,在程序执行期间不会改变.这些固定的值,又叫做字面量. 常量可以是任何的基本数据类型,比如整数常量.浮点常量.字符常量,或字符串字面值,也有枚举常量. 常量就像是常规的变量,只不过常量的值在定义后不能进行修改. 整数常量 整数常量可以是十进制.八进制或十六进制的常量.前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制. 整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long).

C语言 指针数组详解及示例代码_C 语言

如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组.指针数组的定义形式一般为: dataType *arrayName[length]; [ ]的优先级高于*,该定义形式应该理解为: dataType *(arrayName[length]); 括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType *. 除了每个元素的数据类型不同,指针数组和普通数组在其他方面都是一样的,下面是一个简单的例子: #include <stdi

C语言 变量详解及示例代码_C 语言

C 变量 变量其实只不过是程序可操作的存储区的名称.C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字和下划线字符组成.它必须以字母或下划线开头.大写字母和小写字母是不同的,因为 C 是大小写敏感的.基于前一章讲解的基本类型,有以下几种基本的变量类型: 类型 描述 char 通常是一个八位字节(一个字节).这是一个整数类型. int 对机器而言,整数的最自然的大小. float 单精度浮点值. doub

C语言 存储类详解及示例代码_C 语言

C 存储类 存储类定义 C 程序中变量/函数的范围(可见性)和生命周期.这些说明符放置在它们所修饰的类型之前.下面列出 C 程序中可用的存储类: auto register static extern auto 存储类 auto 存储类是所有局部变量默认的存储类. { int mount; auto int month; } 上面的实例定义了两个带有相同存储类的变量,auto 只能用在函数内,即 auto 只能修饰局部变量. register 存储类 register 存储类用于定义存储在寄存器