[問題] 指標字串的問題

看板C_and_CPP作者 (阿鳥喂)時間13年前 (2012/01/15 06:46), 編輯推噓4(4024)
留言28則, 7人參與, 最新討論串1/2 (看更多)
請問以下程式碼 為什麼無法運行 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

01/15 14:53, , 1F
不能把char*轉成字串...他已經告訴你了
01/15 14:53, 1F

01/15 14:55, , 2F
你是用那一版的compiler?
01/15 14:55, 2F

01/15 15:06, , 3F
GNU GCC Complier 抱歉剛碰C++
01/15 15:06, 3F

01/15 15:08, , 4F
其實它寫的是不能把常數字串轉成 char * 才對...
01/15 15:08, 4F

01/15 15:09, , 5F
把第一個宣告改成 const char * 應該就可以了吧, 猜的
01/15 15:09, 5F

01/15 15:09, , 6F
我也 gcc 為啥可以...
01/15 15:09, 6F

01/15 15:10, , 7F
所以我應該是要打成const char* pfruit("apple") 這樣才
01/15 15:10, 7F

01/15 15:11, , 8F
對?
01/15 15:11, 8F

01/15 15:12, , 9F
改成後的確可以執行,但我學長也gcc他不改就可以了
01/15 15:12, 9F

01/15 15:12, , 10F
是的,因為 char* pfruit 執行 pfruit[0] = 'b';
01/15 15:12, 10F

01/15 15:13, , 11F
是合理的,但指向 "apple" 就不行
01/15 15:13, 11F

01/15 15:14, , 12F
"apple" 裡面的東西不可改,就向 1 = 3 + 2; 一樣不合理
01/15 15:14, 12F

01/15 15:15, , 13F
我也是直接可以編譯,但執行 pfruit[0] = 'b'; 就會出錯
01/15 15:15, 13F

01/15 15:16, , 14F
而 const char* pfruit; 是像編譯器保證不會透過
01/15 15:16, 14F

01/15 15:16, , 15F
pfruit 改動記憶體內的值
01/15 15:16, 15F

01/15 15:17, , 16F
至於為什麼有的不加 const 可以過就是歷史因素了...
01/15 15:17, 16F

01/15 15:18, , 17F
那是warn,可以執行正常
01/15 15:18, 17F

01/15 15:20, , 18F
我要聽L大說故事xdd
01/15 15:20, 18F

01/15 15:24, , 19F
我也是警告 可是最後1 errors,0 warnings 無法執行
01/15 15:24, 19F

01/15 15:30, , 20F
可能開了 -Werror?講一下你的編譯環境會比較好...
01/15 15:30, 20F

01/15 15:47, , 21F
沒什麼故事, 單純就只是以前的人都這麼寫而已...
01/15 15:47, 21F

01/15 16:04, , 22F
code block,gnu gcc complier
01/15 16:04, 22F

01/15 16:31, , 23F
按照這樣的話,不知道要怎麼把常數指標指向物件
01/15 16:31, 23F

01/15 16:32, , 24F
無法執行 char* const pstr("text")
01/15 16:32, 24F

01/15 16:43, , 25F
char const * pstr("text");
01/15 16:43, 25F

01/15 16:45, , 26F
我倒覺得是因為C++包含以前C的緣故說@@
01/15 16:45, 26F

01/15 19:03, , 27F
同意樓上,這應該就是歷史緣故阿XD
01/15 19:03, 27F

01/16 01:15, , 28F
const std::string str("text"); 不好嗎...XD
01/16 01:15, 28F
文章代碼(AID): #1F4dOjgB (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1F4dOjgB (C_and_CPP)