0

I am new to C programming and was try on some simple code. I got a "segmentation fault" for below code, please help.

The code as below:

#include <stdio.h>

int del_substr(char *str,char const *substr);

int main(void)
{
char *str="welcome";
char *substr="com";
int result;

result=del_substr(str,substr);
if(result==1)
{
    printf("find and deleted! new string is %s\n",str);
}
else
{
    printf("did not find the substr\n");
}

return 0;
}

int del_substr(char *str,char const *substr)
{
int i=1;
char *temp=NULL;
while(*str!='\0')
{
    if(*str==*substr)
    {
        while(*(substr+i)!='\0' && *(substr+i)==*(str+i))
        {
            i++;
        }
        if(*(substr+i)=='\0')
        {
            printf("We find it!\n");
            temp=str;
        }
    }
    if(temp!=NULL)
    {
        break;
    }
    else
    {
        str++;
        i=1;
    }
}
if(temp!=NULL)
{
    while(*(temp+i)!='\0')
    {
        *temp=*(temp+i);
        temp++;
    }
    *temp='\0';
    return 1;
}
else
{
    return 0;
}

}

This code is meant to find substr in str and then delete substr from str, moving everything behind substr forward, return 1. else if failed in the searching, return 0 instead.

when the code runs to below line, a segmentation fault is showing up.

*temp=*(temp+i);

Can anyone help? Thanks so much in advance.

Thanks.

Marvin Zhang
  • 169
  • 1
  • 8
  • Check this https://stackoverflow.com/questions/164194/why-do-i-get-a-segmentation-fault-when-writing-to-a-string-initialized-with-cha – Karthick Apr 30 '20 at 15:52

1 Answers1

1

You can't modify literal strings in 'C'.

Try replacing

char *str="welcome";
char *substr="com";

with

char str[]="welcome";
char substr[]="com";
rtx13
  • 2,580
  • 1
  • 6
  • 22