2011-08-21 54 views
1

這裏我想用XOR操作來交換一個字符串中的兩個字符。但GCC編譯器給我一個segmentation fault兩個字符的異或操作

#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'是矯枉過正的,並且讓你負責'免費'你可能沒有預料到的事情。 –