欢迎转载,请注明出处,本文地址: http://blog.csdn.net/jk050802/article/details/8642790
联系邮箱:yinfork@foxmail.com
简介
1. 字符串比较strncmp函数与strcmp函数不同的地方是参数里面是否有n。n代表比较的字符的个数。但是strncmp的功能只能从开头比较,没有grep的功能;
2. 对于接受的参数,如:argv[1], argv[2]。采用宏定义来的方法来区分参数之间不同的含义。如:#define KEY_PTR argv[1] #defineFILE_PTR argv[2] 。
3. 在使用fopen函数后,记得在程序末尾使用fclose来关闭文件流。也可以使用atexit函数来登记退出的处理函数,来关闭文件流。
示例代码
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX_BUFFER 200
#define KEY_PTR argv[1]
#define FILE_PTR argv[2]
int main(int argc,char *argv[])
{
charbuffer[MAX_BUFFER];
FILE*fp;
intkey_sum = 0,res_sum = 0;
char*buf_ptr = NULL;
charconst *key_ptr = NULL;
if(argc< 3){
printf("lackcommand\n");
exit(EXIT_FAILURE);
}
if(strlen(FILE_PTR)== 0) {
printf("filename error\n");
exit(EXIT_FAILURE);
}
fp= fopen(FILE_PTR,"r");
if(!fp){
printf("openfile error\n");
exit(EXIT_FAILURE);
}
key_sum= strlen(KEY_PTR);
printf("find:\n");
while(fgets(buffer,sizeof(buffer),fp)!= 0){
/*
if(strncmp(buffer,KEY_PTR,key_sum)== 0)
printf("find%s\n",buffer);
*/
buf_ptr= buffer;
key_ptr= KEY_PTR;
while(*buf_ptr!= '\0'){
if((*buf_ptr== '\0')|(*key_ptr == '\0'))
break;
if(*buf_ptr== *key_ptr){
key_ptr++;
if(*key_ptr== '\0'){
printf("%s",buffer);
res_sum++;
}
}
elsekey_ptr = KEY_PTR;
buf_ptr++;
}
}
fclose(fp);
printf("progress%d is found %d\n",getpid(),res_sum);
exit(EXIT_SUCCESS);
}
运行结果
[root@localhost grep]# ./y_grep incy_grep.c
find:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
progress 10902 is found 3