编写一个小程序,实现如下功能:
l 打开一个文本文件(纯ascii码构成,字符个数大于5)
l 输出文件的总行数
l 通过写文件操作将此文件的最后5个字符替换为“abcde”
#include <stdio.h>
#include <unistd.h>#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <ucontext.h>
#define BUF_LEN 128 /*缓冲区长度*/
#define REPLACE_STR "abcde" /*替换的字符串*/
int main(int argc, char *argv[])
{
FILE *fp ;
char buf[BUF_LEN]={0};
char bufTemp[BUF_LEN]={0};
char modifyBuf[BUF_LEN]=REPLACE_STR;
int lineCnt = 0; /*文件行数初始化为0*/
int writeFlag=0; /*文件写标志位初始值为0*/
int sumstrLength=0;
fp= fopen("homework.txt", "r+"); /*以读写方式打开文件*/
if(NULL==fp)
{
fprintf(stderr,"failed open the file\n"); /*提示打开文件失败*/
return -1;
}
else
{
while (fgets(buf, BUF_LEN, fp)) /*fgets循环读取,直到文件最后,才会返回NULL*/
{
lineCnt++; /*统计文件行数*/
sumstrLength+=strlen(buf);
}
printf("lineCnt= %d\n\n", lineCnt); /*打印总行数*/
if((sumstrLength>=5) && (0==strcmp(modifyBuf,"abcde")) && (0==writeFlag)) /*文本内容长度大于5,写入的内容为abcde,且未执行过写操作,执行替换操作*/
{
fseek(fp, -(strlen(modifyBuf)+1), SEEK_END); /*移动文件指针到待写入的位置*/
fprintf(fp, "%s", modifyBuf); /*写入数据*/
writeFlag=1;
fprintf(stdout,"Have replaced successfully!\n\n");
}
else
{
if(sumstrLength<5)
{
fprintf(stderr,"The length of content is less 5!!\n\n"); /*内容长度小于5时,给出错误提示*/
}
else
{
;
}
if(0!=strcmp(modifyBuf,"abcde"))
{
fprintf(stderr,"The replacing string is not the abcde!!\n\n");/*替换的字符串不是abcde时,给出错误提示*/
}
else
{
;
}
if(1==writeFlag)
{
fprintf(stderr,"The file can be modified only only one time!!\n\n");/*写操作次数大于1时给出错误提示*/
}
else
{
;
}
}
fclose(fp);
}
return 0;
}