看板 C_and_CPP 關於我們 聯絡資訊
正在想如何修改13誡之4所以去看C跟C++對於字串常數的定義: http://en.cppreference.com/w/c/language/string_literal http://en.cppreference.com/w/cpp/language/string_literal 對C來說: 字串常數定義是這樣做(舉例): char *a = "bla"; 這個動作會新增一個內含元素為"bla\0"的static char[4], 然後a會指向這個static char的位址。 至於 char b[] = "abc"; 這動作會在&b處新增一個內含"abc\0"的char[4]。 要是試圖去更改 a指向的static char ,結果會是undefined behavoir。 (我在gcc試過,還真的可以改) 但是b的元素是可以改的。 對於C++來說:字串常數是 const char[]。 const char* pc = "Hello"; // 字串常數 char* c = "Kitty"; // C++03似乎也允許把這當字串常數。C++11我就不知了 至於修改字串常數(要先把它的const cast掉),一樣是undefined behavior const char* pc = "Hello"; char* p = const_cast<char*>(pc); p[0] = 'M'; // undefined behaviour -- 個人網頁:http://gnitnaw.github.io/ 以後在C_and_CPP或LinuxDev發表的文章都會放一份在這邊。 有錯請指正,這樣我才能放心修改十三誡,感謝 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.209.153.222 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1463157729.A.28B.html ※ 編輯: wtchen (86.209.153.222), 05/14/2016 01:52:38