2013-02-26 65 views
1

我想从字符串中删除两个连续的重复元素。我在第16行中得到了段错误。即使是第17行的注释也给我带来了同样的错误。为什么段错误发生在下面

不要担心我的我的program.it可能是错误的逻辑......但我与此error..help我出去砸中,解释为什么我收到此错误

#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; 
} 
+3

你没有使用你的编译器警告。在转向SO之前,确保使用本地可用的工具。 – 2013-02-26 17:31:39

+0

@Pascal Cuoq它是上面提到的一个副本... – karthik 2013-02-26 17:38:44

回答

4
char *st = "fvvbbyyr"; 

st指向匿名字符串"fvvbbyyr",它可以位于只读内存中。

*(st+j-2) = *(st+j); 

试图修改这样的值会导致未定义的行为。

一个好习惯是将指针声明为const char *,因为字符串是以这种方式表现的。

const char *st = "fvvbbyyr"; 

然后你的编译器应该打印一些警告/错误。而使用数组:

char st[] = "fvvbbyyr"; 

BTW,该数组下标操作[]可以使你的代码更易读。

st[j - 2] = st[j]; 

此外,您正在循环访问st[i+1] == st[len]一次。

+0

感谢您的解释...现在错误没有发生..谢谢 – karthik 2013-02-26 17:40:06