我正在尝试从字符串中删除两个连续的重复元素。我在第16行中遇到了分段错误。即使注释的第17行也会出现同样的错误。
不要担心我的程序逻辑。这可能是错的......但我对这个错误很感到震惊..帮助我...解释为什么我收到此错误
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *st="fvvbbyyr";
int i=0,j,len;
for(len=0;st[len]!='\0';len++);
for(i=0;i<len;i++)
{
if(st[i]==st[i+1])
{
for(j=i+2;j<len;j++)
{
*(st+j-2)=*(st+j);
//st[j-2]=st[j];
}
len = len-2;
i=-1;
}
}
return 0;
}
答案 0 :(得分:4)
char *st = "fvvbbyyr";
st
指向匿名字符串"fvvbbyyr"
,它可以位于只读内存中。
*(st+j-2) = *(st+j);
尝试修改此类值会导致未定义的行为。
一个好习惯是将指针声明为const char *
,因为字符串的行为就是这样。
const char *st = "fvvbbyyr";
然后你的编译器应该打印一些警告/错误。使用相当数组:
char st[] = "fvvbbyyr";
顺便说一下,数组下标运算符[]
可能会使您的代码更具可读性。
st[j - 2] = st[j];
此外,您在循环中访问st[i+1] == st[len]
。