C语言中处理文本内容,通常有三种形式,一是逐个字符,二是按行处理,三是二进制形式,这里用一段C代码演示一下按行处理的过程,顺便回顾一下标准C中行I/O相关函数.
#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()则不需要一个缓存,来源也固定为标准输入输出,这有它的缺点,即不可控制每次读写的长度,有时很容易产生溢出,造成不良后果.