我一直试图从字符串中删除字符而不使用额外的内存并将其固定到位。我只是尝试从给定的输入字符串中删除字符'a'但我的代码给出了分段错误。
输入 - abca
输出-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);
}
答案 0 :(得分:2)
char *str = "abca";
错误为str
指向字符串文字的指针。使用char数组,它应该是char str[] = "abca";
。
因为str
指向一个const字符串文字,所以像str[i] = 'F'
这样的表达式是非法表达式(因为它试图修改常量字符串的第一个字符),这会导致{{3}在运行时。
您的逻辑中也存在一个错误。在for i
作为变量的for循环中再次递增i
在逻辑上是不正确的。它应编码如下。
for(i=0; i<len; i++)
{
if(str[i] == 'a')
{
continue;
}
str[j] = str[i];
j++;
}
答案 1 :(得分:0)
输出-bc调试器说分段错误在行“str [j] = str [i]”中。
这部分代码
if(str[i]=='a')
{
i=i+1;
}
str[j]=str[i];
当我的值为len-1时;
然后它会递增,现在str [i]超出str的大小,这将是错误。