2013-02-26 6 views
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; 
} 
+3

컴파일러 경고를 사용하고 있지 않습니다. SO로 돌아 가기 전에 현지에서 사용 가능한 도구를 소진해야합니다. –

+0

@Pascal Cuoq 그것은 위의 하나의 복제입니다 ... – karthik

답변

4
char *st = "fvvbbyyr"; 
을 얻고 이유를 설명

잘못 될 수 있습니다 내 program.it 내 논리에 대해 걱정하지 말아 ...하지만 난이 날 error..help 강타이다

st은 익명 문자열 "fvvbbyyr"을 가리키며 읽기 전용 메모리에 있습니다.

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

이러한 값을 수정하려고하면 정의되지 않은 동작이 발생합니다.

스트링 litteral이 이런 식으로 동작하기 때문에 포인터를 const char *으로 선언하는 것이 좋습니다.

const char *st = "fvvbbyyr"; 

그런 다음 컴파일러에서 경고/오류를 인쇄해야합니다. 배열 오히려 사용

char st[] = "fvvbbyyr"; 

BTW, 운영자 [] 첨자 배열이 코드를 읽기 쉽게 만들 수 있습니다.

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

은 또한 당신은 당신의 루프에서 한 번 st[i+1] == st[len]에 액세스 할 수 있습니다.

+0

설명 주셔서 감사합니다 ... 이제 오류가 발생하지 않습니다 .. 감사합니다 – karthik

관련 문제