C语言中处理文本​​内容​​​,通常有三种形式,一是逐个字符,二是按行处理,三是二进制形式,这里用一段C代码演示一下按行处理的​​过程​​​,顺便回顾一下​​标准​​C中行I/O相关函数.

代码​​文件​​​ ma​​in​​.c


#include <stdio.h>
#include <stdlib.h>
#define MAX_LENTH 1024
/**********************************************************
功能描述:按行读写文件
涉及知识:行I/O相关函数
1)未格式化行I/O函数:fgets(),gets(),fputs(),puts()
2)格式化行I/O函数:scanf(),fscanf(),printf(),fprintf()
**********************************************************/
void printLine(char *path , char *dest);
int main()
{
char *path = "/home/magc/software/test1.txt";
char *dest = "/home/magc/software/dest.txt";
printLine(path,dest);
return 0;
}
void printLine(char *path , char *dest)
{
char buffer[MAX_LENTH];//以一个字符数组为缓存,按行读取内容,每次按一个字符串来处理
int num = 1;
FILE *pf = fopen(path,"r");
FILE *df = fopen(dest,"w");
if(pf != NULL&&df !=NULL)
{
perror("file not open ");
}
while(fgets(buffer,MAX_LENTH,pf)!=NULL)
{
printf("No.%d:%s\n",num,buffer);
fputs(buffer,df);
num++;
}
fclose(pf);
}


注:上述代码的​​功能​​就是按行读取一个文件内容,然后在每行内容前加行数,打印并输出到另一个文件中去.

涉及知识小结:

1, fgets()函数:指定一个缓存,每次读取最大长度,每次读取截至有两种情况,一是遇到换行符,二是已经达到缓存的最大长度,下​​一次​​​读取会从下一个字符开始,未不会造成字符丢失的.​​另外​​每次读到缓存中,会在最后一位加上"\NUL",使此次读取结果作为一个完整的字符串.

2,fputs()函数:指定一个字符串,将这个字符串连续写入到指定的文件中去.其中的换行符也都是直接写入,实现按行写入的效果.

3,gets()和puts()则不需要一个缓存,来源也固定为标准​​输入​​输出,这有它的缺点,即不可​​控制​​每次读写的长度,有时很​​容易​​产生溢出,造成不良后果.