看板 C_and_CPP 關於我們 聯絡資訊
請問以下程式碼 為什麼無法運行 code: #include<iostream> using namespace std; int main() { char* pfruit("apple"); cout<<endl<<pfruit; return 0; } 運行後跳出 警告:deprecated conversion from string constant to 「char*」 [-Wwrite-strings]| 謝謝大家替小弟解惑> < -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.19.18
diabloevagto:不能把char*轉成字串...他已經告訴你了 01/15 14:53
diabloevagto:你是用那一版的compiler? 01/15 14:55
j9353242:GNU GCC Complier 抱歉剛碰C++ 01/15 15:06
uranusjr:其實它寫的是不能把常數字串轉成 char * 才對... 01/15 15:08
uranusjr:把第一個宣告改成 const char * 應該就可以了吧, 猜的 01/15 15:09
WJAider:我也 gcc 為啥可以... 01/15 15:09
j9353242:所以我應該是要打成const char* pfruit("apple") 這樣才 01/15 15:10
j9353242:對? 01/15 15:11
j9353242:改成後的確可以執行,但我學長也gcc他不改就可以了 01/15 15:12
WJAider:是的,因為 char* pfruit 執行 pfruit[0] = 'b'; 01/15 15:12
WJAider:是合理的,但指向 "apple" 就不行 01/15 15:13
WJAider:"apple" 裡面的東西不可改,就向 1 = 3 + 2; 一樣不合理 01/15 15:14
WJAider:我也是直接可以編譯,但執行 pfruit[0] = 'b'; 就會出錯 01/15 15:15
WJAider:而 const char* pfruit; 是像編譯器保證不會透過 01/15 15:16
WJAider:pfruit 改動記憶體內的值 01/15 15:16
LPH66:至於為什麼有的不加 const 可以過就是歷史因素了... 01/15 15:17
diabloevagto:那是warn,可以執行正常 01/15 15:18
diabloevagto:我要聽L大說故事xdd 01/15 15:20
j9353242:我也是警告 可是最後1 errors,0 warnings 無法執行 01/15 15:24
uranusjr:可能開了 -Werror?講一下你的編譯環境會比較好... 01/15 15:30
LPH66:沒什麼故事, 單純就只是以前的人都這麼寫而已... 01/15 15:47
j9353242:code block,gnu gcc complier 01/15 16:04
j9353242:按照這樣的話,不知道要怎麼把常數指標指向物件 01/15 16:31
j9353242:無法執行 char* const pstr("text") 01/15 16:32
s3748679:char const * pstr("text"); 01/15 16:43
s3748679:我倒覺得是因為C++包含以前C的緣故說@@ 01/15 16:45
WJAider:同意樓上,這應該就是歷史緣故阿XD 01/15 19:03
james732:const std::string str("text"); 不好嗎...XD 01/16 01:15