[LCP]segmentation fault core dump
mehul radheshyam choube
mehulchoube_cprog at rediffmail.com
Fri Feb 1 23:54:02 UTC 2002
hi,
can any one look into this code please.
mehul.
*****************line_parser.c**************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define KB 1024
char * remove_spaces(const char *buf)
{
char *rbuf=(char *)strdup(buf);
int j=0,i=0,k;
if(rbuf == NULL)
return NULL;
for(i=0;rbuf[i]==' ';i++)
{
for(j=i;rbuf[j]!='\0';j++)
rbuf[j]=rbuf[j+1];
--i;
}//end of for
while(strchr(rbuf,' '))
{
if(rbuf[strlen(rbuf)-1] != ' ')
break;
rbuf[strlen(rbuf)-1]='\0';
}//end of while
for(i=0;rbuf[i]!='\0';i++)
{
if((rbuf[i] == ' ' ) && (rbuf[i+1] == ' '))
{
k=i-1;
for(j=i+1;rbuf[j]!='\0';j++,i++)
rbuf[i]=rbuf[j];
rbuf[i]='\0';
i=k;
}//end of if
}//end of for
return rbuf;
}
int line_parser(char **values,char *buf)
{
char *tmpStr=NULL;
int iNoofSpaces=0,i;
char *value=NULL;
char *tmpBuf=NULL;
int iPosition=0;
tmpStr=remove_spaces(buf);
if(tmpStr == NULL)
{
printf ("ERROR in remove_spaces(), at line %d of file %s.\n",
__LINE__, __FILE__);
return -1;
}//end of if(tmpStr == NULL)
strcpy(buf,tmpStr);
free(tmpStr);
tmpStr=NULL;
if(buf[strlen(buf)-1] == '\n')
buf[strlen(buf)-1] ='\0';
if((tmpBuf=(char *)malloc(strlen(buf)+1)) == NULL)
{
printf ("ERROR : malloc fail, at line %d of file %s.\n",
__LINE__, __FILE__);
return -1;
}//end of if
for(i=0;buf[i]!='\0';i++)
{
if(buf[i] == ' ')
iNoofSpaces++;
}//end of for
printf("iNoofSpaces = %d\n",iNoofSpaces);
if((values=(char **)malloc(iNoofSpaces+1)) == NULL)
{
printf ("ERROR : malloc fail, at line %d of file %s.\n",
__LINE__, __FILE__);
return -1;
}//end of if
while(buf!=NULL)
{
if(strstr(buf," "))
strcpy(tmpBuf,(strchr(buf,' ')+1));
else
tmpBuf=NULL;
printf("tmpBuf = %s\n",tmpBuf);
for(i=0;buf[i]!=' ' && buf[i]!='\0';i++);
if((value=(char *)malloc(i+1)) == NULL)
{
printf ("ERROR : malloc fail, at line %d of file %s.\n",
__LINE__, __FILE__);
return -1;
}//end of if
for(i=0;buf[i]!=' ' && buf[i]!='\0';value[i]=buf[i],i++);
value[i]='\0';
printf("value = %s\n",value);
if((values[iPosition]=(char *)malloc(strlen(value)+1)) == NULL)
{
printf ("ERROR : malloc fail, at line %d of file %s.\n",
__LINE__, __FILE__);
return -1;
}//end of if
strcpy(values[iPosition],value);
printf("values[iPosition] = %s\n",values[iPosition]);
iPosition++;
if(value)
free(value);
value=NULL;
if(NULL != tmpBuf)
{
strcpy(buf,tmpBuf);
printf("buf = %s\n",buf);
}//end of if(NULL != tmpBuf)
else
buf=NULL;
}//end of while(buf!=NULL)
if(tmpBuf)
free(tmpBuf);
tmpBuf=NULL;
return iNoofSpaces+1;
}
int main(void)
{
char str[KB+1];
int ret,i;
char **values=NULL;
printf("enter the string :\n");
fgets(str,KB,stdin);
ret=line_parser(values,str);
for(i=0;i<ret;i++)
printf("%s\n",values[ret]); /*core dump error comes here*/
for(i=0;i<ret;i++)
if(values[i])
{
free(values[i]);
values[i]=NULL;
}//end of if(values[i])
if(values)
free(values);
values=NULL;
return 0;
}
More information about the linuxCprogramming
mailing list