作者allssddaa (屌炸天)
看板C_and_CPP
標題[問題] 字元指標的問題
時間Thu Sep 5 09:32:52 2019
開發平台(Platform): (Ex: Win10, Linux, ...)
WIN10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
visual studio 2019
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
餵入的資料(Input):
預期的正確結果(Expected Output):
hello 0x440000
world 0x440008
錯誤結果(Wrong Output):
E0144 類型 "const char *" 的值無法用來初始化類型 "char *" 的實體
E0513 類型 "const char *" 的值無法指派至類型 "char *" 的實體
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
#include <iostream>
using namespace std;
int main() {
char* str = "hello";
void* add = 0;
add = str;
cout << str << "\t"
<< add << endl;
str = "world";
add = str;
cout << str << "\t"
<< add << endl;
return 0;
}
補充說明(Supplement):
按照網站的教學宣告一個字元的指標
但是編譯卻出錯誤
直接複製網站的也是這樣
請問是什麼問題呢
網站教的是錯的嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.92.60 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1567647174.A.E03.html
→ Lipraxde: 意思是你不能把 const T * 丟給 T * 09/05 11:30
→ tw4563335: 先宣告變數產生記憶體位置才能用指標指向變數 09/05 12:28
推 Gway: void *addr改成宣告 const char *addr 09/05 12:46
→ james732: 這個寫法在純C是OK的,看起來是C++比較嚴格 09/05 12:49
推 kaneson: 工具type checking變嚴是趨勢, 加上強制轉型str = (char* 09/05 15:41
→ kaneson: ) "world"; 及 add = (void*) str; 符合等號左邊即可, 09/05 15:41
→ kaneson: 早期c的type checking很鬆, 所以有些舊書或教學打在新工 09/05 15:41
→ kaneson: 具上會報錯,還有這支例子不適合學hello world的新手 09/05 15:41
→ loveme00835: 因為你複製的是 C code 不是 C++ code 09/07 03:29
→ dces4212: 請問c++ 的*char預設是const嗎 不然為什麼第二次assign 09/08 20:37
→ dces4212: str的時候會跳那個error 感謝 09/08 20:37
推 LPH66: 樓上想問的應該是用 "" 括起來的 literal 09/08 23:01
→ LPH66: 是這個的話那沒錯, C++ 的字串 literal 都有 const 09/08 23:01