-1

我一直在尝试在不使用额外内存并将其放置到位的情况下从字符串中删除字符。我刚刚尝试从给定的输入字符串中删除字符“a”,但我的代码给出了分段错误。

输入 - abca

Output-bc 调试器说分段错误在“str[j]=str[i]”行中。请帮帮我:)谢谢

这是代码

 #include<stdio.h>
#include<string.h>

void removest(char *str) 
{
  int i,j=0;
  int len=strlen(str);
  for(i=0;i<len;i++)
    {
       if(str[i]=='a')
    {
      i=i+1;
    }
      str[j]=str[i];
      j++;
    }
  str[j]='\0';
  printf("%s \n",str);
}

int main()
{
  char *str="abca";
  removest(str);
}
4

2 回答 2

2

char *str = "abca";str作为指向字符串文字的指针是错误的。使用 char 数组,应该是char str[] = "abca";.

因为str指向一个 const 字符串文字,所以一个表达式 likestr[i] = 'F'是一个非法表达式(因为它试图修改一个常量字符串的第一个字符),这会导致运行时出现未定义的行为

您的逻辑中也存在一个错误。i在 for 循环中使用ias 变量再次递增在逻辑上是不正确的。它应该编码如下。

for(i=0; i<len; i++)
{
    if(str[i] == 'a')
    {
        continue;
    }
    str[j] = str[i];
    j++;
}
于 2013-09-18T05:08:26.070 回答
0

Output-bc 调试器说分段错误在“str[j]=str[i]”行中。

在这部分代码中

if(str[i]=='a')
{
  i=i+1;
}
  str[j]=str[i];

当我看重 len-1 时;

然后它现在增加 str[i] 超出 str 大小,这将是错误的。

于 2013-09-18T05:18:45.470 回答