簡體   English   中英

為什么我會收到編譯器警告,將字符串文字轉換為char *,這是不是很糟糕?

[英]Why do I get a compiler warning for converting a string literal to a char*, is it bad?

所以編譯器告訴我這是從字符串文字到char *的不推薦的轉換:

 char* myString = "i like declaring strings like this";

我應該擔心嗎? 這是錯誤的方法嗎?

我需要將myString傳遞給一個接受char*的函數,我應該在沒有這個轉換的情況下正確初始化char*嗎?

是的,你應該擔心它!

您應該將其聲明為:

const char* myString = "i like declaring strings like this";

mystring是一個指向字符串文字的指針"i like declaring strings like this"的字符串"i like declaring strings like this" ,字符串文字駐留在一個內存空間(Implementation Defined)中,程序不應該修改它。
修改字符串文字會導致未定義的行為

因此,C ++ 03 Standard不使用關鍵字const聲明字符串文字,這確保了不能通過指針修改字符串文字。


回答你的問題編輯,已由@Benjamin在評論中發布,只是引用他的回答:

使用數組:
char myString [] =“我喜歡聲明這樣的字符串”;
將文字復制到數組中,可以修改副本

它甚至不應該編譯。 如果你需要將它傳遞給你確定不會改變你需要使用const cast的字符串的函數,它的一個正確的用途:

functionName(const_cast<char *>("something"));

或者,如果您不想進行const轉換,則可以將字符串復制到堆棧中:

char str[] = "something";
functionName(str);

暫無
暫無

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

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