- 论坛徽章:
- 0
|
不多说了直接看代码.
- //
- //统计line<550的个数
- //
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<unistd.h>
- int main()
- {
- int i = 0,j,num;
- FILE *fd;
- char fline[200],*a,*b;
-
- if( ( fd = fopen("/home/changminghua/code/qyld.log.2007-03-01.11","r") ) == NULL )
- printf("open log error");
-
- a = malloc(200);
- b = malloc(10);
-
- while(!feof(fd))
- {
- memset(a,0x00,200);
- memset(b,0x00,10);
- memset(fline,0x00,200);
- fgets(fline,200,fd);
-
- if( (a = strstr(fline,"line=")) != NULL )
- {
- for(j = 0 ; *(a+5+j) != ',';j++) //1。取line=后面的整数
- *(b+j) = *(a+5+j); //
- if ( (num=atoi(b))<550 ) //2。统计line小于550的个数
- i = i+1;
- };
- }
-
-
- fclose(fd);
- free(a);
- free(b);
- printf("line <550 的个数为 %d\n",i);
- return 0;
- }
复制代码
gdb第二次跟到fgets这里就报段错
27 fgets(fline,200,fd);
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x40080454 in fgets () from /lib/libc.so.6 |
|