今天在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