簡體   English   中英

字符串文字和 const 字符串文字有什么區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM