1

我正在尝试从字符串中删除两个连续的重复元素。我在第 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;
}
4

1 回答 1

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]一次。

于 2013-02-26T17:31:57.173 回答