2011-01-11 21 views
1

我用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 

我不明白爲什麼

+0

什麼是你想怎麼辦?用「d」代替「hello world」中的第一個'h',使其成爲「oello world」? – 2011-01-11 22:28:51

回答

2

您不得修改字符串「S」點,以任何方式。這是你不能改變的記憶的一部分。

2

字符串常量是不可修改的,儘管具有類型char*而非const char*由於歷史的原因。嘗試使用字符串常量初始化數組,而不是一個指針:

#include <stdio.h> 
int 
main(void) 
{ 
    char s[] = "hello new!"; 
    puts(s); 
    s[0] = 'c'; 
    puts(s); 
    return 0; 
} 
3

字符串常量存儲在只讀存儲器,你不能修改它們。

如果必須,則使用:

#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; 
} 

這種分配是方便初始化,可以修改你的心臟的內容的本地變量(不是常數)。

1

總線錯誤通常意味着你正在訪問的指針具有無效值 - 例如地址空間外的地址。

我猜想,在這種情況下,那是因爲你正試圖寫入到只讀內存。字符串「hello world」位於您不允許寫入的內存段中。根據操作系統的不同,這些內存段可能受到保護,或者可以爲其寫入任意垃圾。看起來像你的不允許它。正如你可以在其他的答案看到的,你可以解決這個複製/初始化字符串常量到一個數組。