2013-12-08 91 views
1

我完全是C的新手,我正在編寫一個反轉字符串的函數。我的代碼如下所示:C代碼中的分割錯誤

char *str = "abcdef"; 
char *ptr; 
for(ptr = str; *ptr ; ptr++); 

for(; str < --ptr; str++) 
{ 
    char c = *str; 
    *str = *ptr; 
    *ptr = c; 

} 

我得到了分段錯誤錯誤。我沒有看到這個錯誤(也許這太明顯了)。任何提示?

乾杯

回答

6

變化

char *str = "abcdef"; 

char str[] = "abcdef"; 

str指向一個字符串字面量和字符串是不是在C修改,

+0

所以內部我可以更改一個字符串,如果它被聲明爲一個字符數組而不是字符串文字? – slashburn

+0

您不允許修改字符串文字。在第二種情況下,你有一個用字符串文字內容初始化的數組。您可以修改此數組,因爲它不是字符串文字。 – ouah

+0

@ouah如果char * str被聲明爲char str [],它會被存儲在程序的數據部分中嗎? – John

0

你的字符串存儲在ROM中,所以你不能寫信給它。雖然取決於你的平臺。

+2

ROM是隻讀存儲器,但並非所有隻讀存儲器都是ROM。 – alk