2013-12-08 228 views
0

我有代碼:Ç指定字符串指針到其他字符串指針

#include<stdio.h> 

int main() 
{ 
    char *str = "aaaaaaaa"; 
    char *stt = "bbbbbbbb"; 
    *str = *stt; 
    printf("%s\n", str); 

return 0; 
} 

它給了我一個錯誤: 訪問衝突寫入位置, 有人能解釋我爲什麼和如何在走到這一步?

+0

將其改寫禁止文本字符串。 – BLUEPIXY

+0

看到這個http://stackoverflow.com/questions/17132248/modifying-the-data-section-in-c/17132278#17132278 – qwr

+2

你沒有分配一個字符串指針到另一個字符串指針。 '* str = * stt;'和'str [0] = stt [0];'一樣,它試圖將第一個元素從一個地方複製到另一個地方。 – nos

回答

0

"aaaaaaaa"這樣的字符串文字是隻讀的,而且您的代碼正試圖覆蓋由str指向的字符串的第一個字符。如果這是你想要做什麼,你需要做這樣的事情:

char str[9]; 
char *stt = "bbbbbbbb"; 
strcpy(str, "aaaaaaaa"); 
*str = *stt; 
printf("%s\n", str); // prints: baaaaaaa 

當然,它更可能是你真正想要的是這樣的:

str = stt; 
printf("%s\n", str); // prints: bbbbbbbb 
+0

我會迴應@ JensGustedt關於將你的字符串聲明爲'char const *'而不是'char *'的評論。 – godel9

3

你只分配第一個字符,你不應該因爲字符串文字是不可變的。可以使用str = stt;來分配指針。

順便說一句,因爲他們不應該被改變,你最好使用const限定類型爲

char const *str = "aaaaaaaa"; 
0

字符串文字是未改變的,也就是說,你不能修改字符串常量。這是因爲它存儲在只讀部分。

試試這個

char str[] = "aaaaaaaa"; 
char stt[] = "bbbbbbbb"; 

char *pstr = str; 
char *pstt = stt; 

pstr = pstt; 
printf("%s\n", ptr);