C语言 使用自制的 strstr() 函数检查其他字符串中的嵌入字符串,然后将其替换为其他字符串(由用户输入)



我正在编写一个程序,该程序使用指向字符串 str[] 的指针数组。它接收两个字符串 str1 和 str2,并检查 str1 是否嵌入在 str[] 中的任何字符串中。如果找到 str1,则将其替换为 str2。例如:如果 str1 包含 "mountain" 而 str2 包含 "car",则 str 中的第二个字符串应更改为 "Move a car" 。当我尝试执行这个程序时,在gcc中它崩溃了,当我尝试在线编译它时,它给出了分段错误,我无法理解该程序出错的地方以及需要什么更正。

#include<stdio.h>
#include<string.h>
char* xstrstr(char* ,char* );
int main()
{
char *str[]={
                "We will teach you how to...",
                "Move a mountain",
                "Level a building",
                "Erase the past",
                "Make a million",
                "...all through C!"
            };
char* p, *temp, *cpy;
int len,i,j;
char str1[28];
char str2[10];
printf("Enter string1n");
scanf("%s",str1);
printf("Enter string 2n");
scanf("%s",str2);
printf("After modifying the saved stringsnn");
for(i=0;i<6;i++)
{
    p=xstrstr(str[i],str1);
    if(p)
    {
       /*Copy the remaining string*/
       temp=p+strlen(str1);
       strcpy(cpy,temp);
       /*Replace the old string*/
       strcpy(p,str2);
      /*Finally append the remaining part*/
       strcat(p,cpy);
       break;
    }
}
if(p==NULL)
{
    printf("No string match foundn");
    return 1;
}
for(i=0;i<6;i++)
{
    printf("%sn",str[i]);
}
return 0;
}
char* xstrstr(char *string1,char* string2)
{
    while(*string1)
    {
        char* begin=string1;
        char* find=string2;
           while((*string1)&&(*find)&&(*string1==*find))
           {
               string1++;
               find++;
           }
           if(!(*find))
           {
               return begin;
           }
           string1=begin+1;
    }
return NULL;
}

两个主要问题 CPY 未启动

 strcpy(cpy,temp);   

p 指向只读字符串文本,然后写入它。

 strcpy(p,str2);

也就是说,你正在使用strcpy来复制字符串,但你的命运字符串只是一个没有大小的指针。你需要先做一个malloc。这就是为什么它会给你一个分段错误错误。当心没有内存分配的指针,它应该可以工作。在此之后请更新您的代码,如果有任何其他错误,我将编辑此答案

char *cpy;

这些变量永远不会初始化。但你仍然坚持不懈。

编辑:随便去

cpy = malloc(strlen(sourcestring)+1);

相关内容

  • 没有找到相关文章

最新更新