2014-02-21 16 views
0
main() 
{ 
    char *c="abhishek"; 
    int i; 
    c[2]=90; 
    for(i=0;i<12;i++) 
    { 
    printf("%c",c[0]) 
    } 
} 

這裏的輸出是abZishek。但是這會導致總線錯誤,因爲這是一個字符串字面值,我們不能改變它的值。爲什麼c的值會改變?爲什麼字符串中的值發生變化

+7

修改字符串文字會導致未定義的行爲,所以會發生任何事情。 –

+0

這只是內存中的一大塊字節。 – OldProgrammer

+1

這甚至不應該編譯,字符串文字的類型爲'const char []' – Paranaix

回答

7

根據第2.14.5段§C++標準的 11,它調用未定義的行爲:

試圖修改字符串文字的效果是不明確的。

這意味着任何事情都可能發生,而且確實發生了一些事情。你不能假設你調用undefined behavior會發生什麼。

+0

Ace –

+0

此規則對於c也是如此,或者僅適用於C++ – user3335653

+0

是的,在C中,如果程序試圖修改任何字符串文字,則行爲是不確定的。 – 4pie0

3

「未定義的行爲」不保證「總線錯誤」或任何其他類型的錯誤。通常它不容易被檢測到,所以你的編譯器不需要打擾。在這裏,它並不麻煩。但是,這樣做可能會導致不可預知或奇怪的事情發生。

您還缺少庫包括和main返回類型;你正在使用哪一本C++書?

+0

我沒有包含庫,因爲它很明顯,需要包括什麼。我是Btech的最後一年學生,想成爲一名Java程序員>並且我已通過java認證。我想閱讀c和C++只有達到我可以通過compnies的書面測試的水平。我正在使用C語言測試你的c語言技能,並首先考慮理論。我還應該使用什麼? – user3335653

+0

@ user3335653:如果你沒有向我們展示這些東西,那麼使用包括正確的東西在內並不「明顯」。這裏是你的圖書推薦:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

相關問題