main()
{
char *c="abhishek";
int i;
c[2]=90;
for(i=0;i<12;i++)
{
printf("%c",c[0])
}
}
這裏的輸出是abZishek
。但是這會導致總線錯誤,因爲這是一個字符串字面值,我們不能改變它的值。爲什麼c
的值會改變?爲什麼字符串中的值發生變化
main()
{
char *c="abhishek";
int i;
c[2]=90;
for(i=0;i<12;i++)
{
printf("%c",c[0])
}
}
這裏的輸出是abZishek
。但是這會導致總線錯誤,因爲這是一個字符串字面值,我們不能改變它的值。爲什麼c
的值會改變?爲什麼字符串中的值發生變化
根據第2.14.5段§C++標準的 11,它調用未定義的行爲:
試圖修改字符串文字的效果是不明確的。
這意味着任何事情都可能發生,而且確實發生了一些事情。你不能假設你調用undefined behavior會發生什麼。
「未定義的行爲」不保證「總線錯誤」或任何其他類型的錯誤。通常它不容易被檢測到,所以你的編譯器不需要打擾。在這裏,它並不麻煩。但是,這樣做可能會導致不可預知或奇怪的事情發生。
您還缺少庫包括和main
返回類型;你正在使用哪一本C++書?
我沒有包含庫,因爲它很明顯,需要包括什麼。我是Btech的最後一年學生,想成爲一名Java程序員>並且我已通過java認證。我想閱讀c和C++只有達到我可以通過compnies的書面測試的水平。我正在使用C語言測試你的c語言技能,並首先考慮理論。我還應該使用什麼? – user3335653
@ user3335653:如果你沒有向我們展示這些東西,那麼使用包括正確的東西在內並不「明顯」。這裏是你的圖書推薦:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –
修改字符串文字會導致未定義的行爲,所以會發生任何事情。 –
這只是內存中的一大塊字節。 – OldProgrammer
這甚至不應該編譯,字符串文字的類型爲'const char []' – Paranaix