可能重複:
Why do I get a segmentation fault when writing to a string?交換字符只給指針
如果我有一個指針,我知道這兩個字符的索引,我怎麼會掉的字符(我沒「T實際上分配數組)
即
char *str = "hello"
和我知道,我想要交換索引0和4的'h'和'o',然後返回指針。
我已經習慣了這樣做的
temp = array[i];
array[i] = array[j];
array[j] = temp;
可能重複:
Why do I get a segmentation fault when writing to a string?交換字符只給指針
如果我有一個指針,我知道這兩個字符的索引,我怎麼會掉的字符(我沒「T實際上分配數組)
即
char *str = "hello"
和我知道,我想要交換索引0和4的'h'和'o',然後返回指針。
我已經習慣了這樣做的
temp = array[i];
array[i] = array[j];
array[j] = temp;
以下聲明:
char *str = "hello";
應該是,要提醒你的不安全行爲:
const char *str = "hello";
因爲試圖修改字符串litteral是根據C標準未定義的行爲,你應該而是使用一個數組。
char str[] = "hello";
然後,交換數組中的元素是很簡單的:
char tmp = str[0];
str[0] = str[4];
str[4] = tmp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
但我從來沒有說過char [] s = {'h','e'....};我怎麼能這樣做? –
char * foo =「bar」;等於char foo [] = {'b','a','r','\ 0'}; – Nico
這不是平等的。不同的類型,不同的行爲。 –
井約定,你不能指向一個字符串。文字是不可改變的。堅持你一直這樣做的方式。
所以,如果我給了一個指向字符串的指針,我將不得不將它複製到一個char數組中? –
是的,然後你可以交換它。你試過了嗎?你應該得到一個段錯誤。 –
正是我遇到了seg故障,這就是爲什麼我感到困惑! –
一些操作系統/編譯器允許你做修改字符串文字,主要是AIX 5.1。
如果在您的代碼中修改字符串文字,它會讓您的代碼跨平臺變得非常痛苦,因爲您必須重寫代碼以便爲Linux編譯。
這並不清楚你在問什麼。 – MByD