看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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