簡體   English   中英

C中的char * vs const char *

[英]char* vs const char* in C

char* str ="Hello";

在上面的代碼中,文字“ Hello”存儲在DATA段中,並且是只讀的。 所以總是聲明它不是更好:

const char* str = "Hello";

避免使用不正確的代碼,例如:

*(str+1) = 't';

“ Hello”存儲在DATA段中

“ DATA”或.data指的是帶有靜態存儲持續時間的初始化讀/寫變量所在的段。 字符串文字不存儲在此處,而是更有可能存儲在名為.rodata ,也可能與代碼一起存儲在.text 請參見字符串文字:它們去哪里了?

所以總是聲明它不是更好: const char* str = "Hello";

是的,您應該始終const限定指向字符串文字的指針。 普遍認為這是C語言中的最佳做法(在C ++中是強制性的)。

是的,最好將指向字符串文字的指針聲明為const char * “文字”這個名字非常有力地暗示這是不可變的。 不幸的是,C將字符串文字視為char數組,而不是const char ,並且與數字文字不同,必須從某個地方分配字符串文字的存儲空間。 無法保證此存儲空間將取自.rodata類的只讀段-過去,我一直在處理可寫字符串文字的實現。

嘗試修改字符串文字內容的行為是未定義的 -該語言對編譯器或運行時環境沒有要求以任何特定方式處理這種情況。 可能會遇到運行時錯誤,或者字符串可能保持不變,或者字符串可能被修改,可能會發生完全不同的事情。

因此,通過將指針聲明為const char * ,至少可以使通過該指針意外修改文字變得更加困難。 只需記住const 並不意味着“將其放入只讀存儲器中”,而僅意味着“如果有人嘗試修改此事物,則發出診斷信息”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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