[英]Passing string literal to function taking 'char *' and getting a compiler warning
[英]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.