2013-02-26 34 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