我有代碼:Ç指定字符串指針到其他字符串指針
#include<stdio.h>
int main()
{
char *str = "aaaaaaaa";
char *stt = "bbbbbbbb";
*str = *stt;
printf("%s\n", str);
return 0;
}
它給了我一個錯誤: 訪問衝突寫入位置, 有人能解釋我爲什麼和如何在走到這一步?
我有代碼:Ç指定字符串指針到其他字符串指針
#include<stdio.h>
int main()
{
char *str = "aaaaaaaa";
char *stt = "bbbbbbbb";
*str = *stt;
printf("%s\n", str);
return 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
我會迴應@ JensGustedt關於將你的字符串聲明爲'char const *'而不是'char *'的評論。 – godel9
你只分配第一個字符,你不應該因爲字符串文字是不可變的。可以使用str = stt;
來分配指針。
順便說一句,因爲他們不應該被改變,你最好使用const
限定類型爲
char const *str = "aaaaaaaa";
字符串文字是未改變的,也就是說,你不能修改字符串常量。這是因爲它存儲在只讀部分。
試試這個
char str[] = "aaaaaaaa";
char stt[] = "bbbbbbbb";
char *pstr = str;
char *pstt = stt;
pstr = pstt;
printf("%s\n", ptr);
將其改寫禁止文本字符串。 – BLUEPIXY
看到這個http://stackoverflow.com/questions/17132248/modifying-the-data-section-in-c/17132278#17132278 – qwr
你沒有分配一個字符串指針到另一個字符串指針。 '* str = * stt;'和'str [0] = stt [0];'一樣,它試圖將第一個元素從一個地方複製到另一個地方。 – nos