我是新的C编程和尝试一些简单的代码。我得到了一个 "分段故障 "下面的代码,请帮助。
该代码如下。
#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;
}
}
这段代码的意思是在str中找到substr,然后从str中删除substr,将substr后面的所有内容向前移动,返回1,否则如果搜索失败,返回0。
当代码运行到下面一行时,出现了一个分段故障。
*temp=*(temp+i);
有谁能帮忙吗?先谢谢大家了。
谢谢了。
在'C'中,你不能修改字面字符串。
试试用
char *str="welcome";
char *substr="com";
与
char str[]="welcome";
char substr[]="com";