warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]


今天在linux下編譯一個cpp文件時,報出了一個奇怪的錯誤:arning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

改了好一會也不知道哪出問題了,一度懷疑人生....

原來,當g++編譯版本比較高是,linux下就會出現這樣的問題。

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 struct person{
 5     int age;
 6     char *name;
 7 };
 8 int main(){
 9     int i = 0;
10     char *str = "aaaaaa";
11     person *p = NULL;
12     p->age = i;
13     p->name = str;
14     cout<<"his name is"<<*(p->name)<<", he is"<<p->age<<"years old"<<endl;
15     return 0;
16 }

為什么呢?原來char *背后的含義是:給我個字符串,我要修改它。

而理論上,我們傳給函數的字面常量是沒法被修改的

所以說,比較和理的辦法是把參數類型修改為const char *。

這個類型說背后的含義是:給我個字符串,我只要讀取它。

所以,將char*使用const修飾就好了

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 struct person{
 5     int age;
 6     const char *name;
 7 };
 8 int main(){
 9     int i = 0;
10     const char *str = "aaaaaa";
11     person *p = NULL;
12     p->age = i;
13     p->name = str;
14     cout<<"his name is"<<*(p->name)<<", he is"<<p->age<<"years old"<<endl;
15     return 0;
16 }

還有一種方法,值得注意,就是g++編譯的時候,傳入-Wno-write-strings 可關閉該warning


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM