我用C指點串用C
#include<stdio.h>
int main()
{
printf("Hello New!\n");
char c = 'd';
char* s = "hello world";
char **t = &s;
*t[0] = c;
return 0;
}
程序編譯,但不能運行這個程序。 我有這樣的輸出:
Hello New!
Bus error
我不明白爲什麼
我用C指點串用C
#include<stdio.h>
int main()
{
printf("Hello New!\n");
char c = 'd';
char* s = "hello world";
char **t = &s;
*t[0] = c;
return 0;
}
程序編譯,但不能運行這個程序。 我有這樣的輸出:
Hello New!
Bus error
我不明白爲什麼
您不得修改字符串「S」點,以任何方式。這是你不能改變的記憶的一部分。
字符串常量是不可修改的,儘管具有類型char*
而非const char*
由於歷史的原因。嘗試使用字符串常量初始化數組,而不是一個指針:
#include <stdio.h>
int
main(void)
{
char s[] = "hello new!";
puts(s);
s[0] = 'c';
puts(s);
return 0;
}
字符串常量存儲在只讀存儲器,你不能修改它們。
如果必須,則使用:
#include<stdio.h>
int main()
{
printf("Hello New!\n");
char c = 'd';
char s[] = "hello world";
char **t = &s[0];
*t[0] = c;
return 0;
}
這種分配是方便初始化,可以修改你的心臟的內容的本地變量(不是常數)。
總線錯誤通常意味着你正在訪問的指針具有無效值 - 例如地址空間外的地址。
我猜想,在這種情況下,那是因爲你正試圖寫入到只讀內存。字符串「hello world」位於您不允許寫入的內存段中。根據操作系統的不同,這些內存段可能受到保護,或者可以爲其寫入任意垃圾。看起來像你的不允許它。正如你可以在其他的答案看到的,你可以解決這個複製/初始化字符串常量到一個數組。
什麼是你想怎麼辦?用「d」代替「hello world」中的第一個'h',使其成爲「oello world」? – 2011-01-11 22:28:51