[心得] 關於字串常數(string literal)

作者: wtchen (沒有存在感的人)   2016-05-14 00:42:05
正在想如何修改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

Links booklink

Contact Us: admin [ a t ] ucptt.com