[英]What are the differences between string literal and const string literal
以下兩個定義有什么區別:
char *str1 = "string 1"; // (1)
const char *str2 = "string 2"; // (2)
(1),這是字符串文字的未定義行為嗎?
如果不是,我們應該使用什么定義(你能給我一些例子嗎)?
如果你需要一個可變字符串,你應該使用以下
char str1[]="string 1";
在 C++ 中,您不能將字符串文字轉換為非常量,在 C 中可以,但不推薦這種做法。
更新。
在 C++ 中,您可以執行以下操作
char *str1 = (char *)"string 1" ; // (1)
但是你不能使用這個指針來改變字符串的值。
(1),這是字符串文字的未定義行為嗎?
本聲明
char *str1 = "string 1"; // (1)
是指向 C 中字符串文字的指針的有效聲明。 與 C 中的 C++ 相反,字符串文字具有非常量字符 arrays 的類型。
然而,字符串文字在 C 中是不可變的,就像在 C++ 中一樣。 您不能更改字符串文字。 任何更改字符串文字的嘗試都會導致未定義的行為。
來自 C 標准(6.4.5 字符串文字)
7 如果這些 arrays 的元素具有適當的值,則不確定它們是否不同。 如果程序試圖修改這樣的數組,則行為未定義。
最好聲明指向字符串文字的指針,因為它在 C++ 中是必需的,就像
const char *str2 = "string 2"; // (2)
這使您的程序更安全,因為如果您嘗試將指向字符串文字的指針傳遞給 function(其相應參數是指向非常量字符的指針),編譯器將發出錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.