2011-08-21 4 views
1

여기에 XOR 연산을 사용하여 두 문자를 문자열로 바꾸려고합니다. 그러나 GCC 컴파일러는 나를 segmentation fault으로 던졌습니다.두 문자에 대한 XOR 연산

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char *str = "welcome"; 

    str[0] = str[0]^str[1]; // Segmenation fault here 
    str[1] = str[0]^str[1]; 
    str[0] = str[1]^str[0]; 

    printf("%s", str); 
    return 0; 
} 
+4

그런데 컴파일러는 "사용자에게 세그먼트 오류를 ​​던지지"않습니다. 그것은 런타임에 발생합니다. –

답변

9

당신은 메모리를 읽기 전용으로 C.에 str 점을 리터럴을 변경할 수 없습니다.

대신보십시오 :

char str[] = "welcome"; 

이 주제에 C FAQ 있습니다.

+0

나는 코멘트 대신 대답을 게시해야한다는 것을 알았다! ;) +1 –

+0

나는이 주제에 대해 수백 가지의 답변을 찾을 수있을 것이라고 확신한다. –

+0

사실,이 질문은 많이 게시됩니다. – cnicutar

3

str은 문자열 리터럴을 가리 킵니다. 문자열 리터럴은 읽기 전용입니다. 시도 :

char str[] = "welcome"; 
-1

char*은 실제로 상수를 가리 킵니다. 즉, 프로그램의 상수 데이터 부분에 저장된 내용을 수정하려고합니다.

char* str = strdup("welcome"); 
+6

'strdup'은 이러한 목적을 위해 잔인하며 예상치 못한 것을 자유롭게 해줄 책임이 있습니다. –