在一行一行地读文件,然后一行一行地预处理一下,但是读到100多行时就死在循环里面,原文件300多行
不知道到底怎么搞的,在VC6.0时测试时断言错误,在linux下出现段错误?死在那个while循环里面,读了159行左右就死掉了,原文件大哥300行,程序如下
- C/C++ code
#include<string.h>#include<stdlib.h>#include<stdio.h>//#include<unistd.h>int main(){ FILE *fin,*fin1,*fout1,*fout2; char buf[1024],bu_f[1024]; char *buf1=NULL; char *buf_0x=NULL; if((fin=fopen("c:\\debug_ch1.txt","r"))==NULL) { printf("cannot open the file\n"); exit(0); } if((fout1=fopen("debug_ch_re.txt","w"))==NULL) { printf("cannot open outfile\n"); exit(0); } printf("hah!\n"); //fgets(buf,1024,in);int n=0; while(!feof(fin)) { // fgets(buf,1024,fin) ; printf("gegeg!\n");fgets(buf,1024,fin); printf("%d\n",++n); // if(buf[strlen(buf)-1]=='\n') buf[strlen(buf)]=' '; // printf("goo!"); if(strstr(buf,"DrawLine")!=NULL) continue; if((buf1=strstr(buf,"recv from comm:"))!=NULL) buf1+=strlen("recv from comm:"); fputs(buf1,fout1);//printf("oooooo1111\n"); //fputs("\n",out1); }printf("%s",buf); printf("%d\n",n); fclose(fin); fclose(fout1); /* if((fout2=fopen("debug_ch_revise.txt","w"))==NULL) { printf("cannot open the file\n"); exit(0); } printf("11111\n"); /* if((fin1=fopen("debug_ch_re.txt","r"))==NULL) { printf("cannot open outfile\n"); exit(0); }*///printf("222222222222\n");/*while(!feof(fin1)){ printf("sadffqwe\n"); fgets(bu_f,1024,fin1); printf("dsfdgggggggggwr\n"); if(buf[strlen(bu_f)-1]=='\n') buf[strlen(bu_f)]=' '; if(buf_0x=strstr(bu_f,"0x3 ")){ buf_0x+=4; *buf_0x='\n';} fputs(bu_f,fout2);}*///fclose(fin);//fclose(fout2); return 0;}贴在不能发太长,我只能把debug_ch1.txt的形式发出来
recv from comm:0x2 0x48 0x30 0x31 0x30 0x32 0x3 0x2 0x48 0x30 0x35 0x30 0x30 0x3 0x2 0x48
DrawLine:C冻,190, 300, 179, 54, 179, 289
大概每行要么是recv from comm:0x2 0x48 0x30 0x31 0x30 0x32 0x3 0x2 0x48 0x30 0x35 0x30 0x30 0x3 0x2 0x48
要么是有DrawLine:C冻,190, 300, 179, 54, 179, 289组成,当然每次接受数字可能有的行比较长,,有的比较短
但是不知道这个到底是怎么回事,请大牛出马帮帮我把
[解决办法]
又是一个没fgets就判断eof的孩子.
[解决办法]
把缓冲区的大小
char buf[1024],bu_f[1024];
调大一点试试,有可能是在159行的时候缓冲区大小不够了