Hello everyone.
Im playing with one parser that is not working.
It's failing with segment.error, and I could not fix it, since im not good at all in c .
I think the issue is in one place, where im trying to change one string to other one. It's always failing on third step - ending with that segm.error.
Im calling fillcd, where cid2cid "function" is used to modify the buf string.
After third succesfully changed string it fails…Isnt there a memory problem?
buf: 3000/000/00/MOY,3000/000/00/MAX,3000/000/00/CUM,3000/000/00/ECH,3004/000/00/CUM,3004/000/00/ECH,3004/000/00/MOY,3004/000/00/MAX,3004/001/00/CUM,3004/001/00/ECH,3004/001/00/MOY,3004/001/00/MAX,3008/000/00/CUM,3008/000/00/ECH,3008/000/00/MOY
Output in cd variable should be like: MOY_3000_000_00,MAX_3000_000_00,CUM_3000_000_00, ….
Thanks for any ideas !
Script:
Code:
...
char *cid2cid(char *s){
static char tmp[20];
strcpy(tmp, s);
s[0]=tmp[12];
s[1]=tmp[13];
s[2]=tmp[14];
s[3]='_';
s[4]=tmp[0];
s[5]=tmp[1];
s[6]=tmp[2];
s[7]=tmp[3];
s[8]='_';
s[9]=tmp[5];
s[10]=tmp[6];
s[11]=tmp[7];
s[12]='_';
s[13]=tmp[9];
s[14]=tmp[10];
s[15]='\0';
return s;
}
int fillcd( char *buf, char *cd[], FILE *f ) {
char *p;
int i;
cd[0]=cid2cid(strdup(strtok(buf,",")));
i=1;
while ( (p=strtok(NULL, ",")) != NULL ) cd[i++]=strdup(cid2cid(p));
cd[i]=strdup("FINITO");
return i;
}
…
char buf[1000], classn[100], *procstr[100], *cd[200];
counters=fillcd(inbuf,cd, fout);
Thanks for any ideas !