2012-10-13 41 views

回答

1

以下聲明:

char *str = "hello"; 

應該是,要提醒你的不安全行爲:

const char *str = "hello"; 

因爲試圖修改字符串litteral是根據C標準未定義的行爲,你應該而是使用一個數組。

char str[] = "hello"; 

然後,交換數組中的元素是很簡單的:

char tmp = str[0]; 
str[0] = str[4]; 
str[4] = tmp; 
1
temp = array[i]; 
array[i] = array[j]; 
array[j] = temp; 
+0

但我從來沒有說過char [] s = {'h','e'....};我怎麼能這樣做? –

+0

char * foo =「bar」;等於char foo [] = {'b','a','r','\ 0'}; – Nico

+2

這不是平等的。不同的類型,不同的行爲。 –

3

井約定,你不能指向一個字符串。文字是不可改變的。堅持你一直這樣做的方式。

+0

所以,如果我給了一個指向字符串的指針,我將不得不將它複製到一個char數組中? –

+0

是的,然後你可以交換它。你試過了嗎?你應該得到一個段錯誤。 –

+0

正是我遇到了seg故障,這就是爲什麼我感到困惑! –

0

一些操作系統/編譯器允許你做修改字符串文字,主要是AIX 5.1。

如果在您的代碼中修改字符串文字,它會讓您的代碼跨平臺變得非常痛苦,因爲您必須重寫代碼以便爲Linux編譯。