字符指针操作过程中的分段故障[重复]。

问题描述 投票:0回答:1

我是新的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 pointers
1个回答
1
投票

在'C'中,你不能修改字面字符串。

试试用

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

char str[]="welcome";
char substr[]="com";
© www.soinside.com 2019 - 2024. All rights reserved.