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
正在想如何修改13誡之4所以去看C跟C++對於字串常數的定義: