[問題] 字元指標的問題

看板C_and_CPP (C/C++)作者 (屌炸天)時間6年前 (2019/09/05 09:32), 編輯推噓3(3010)
留言13則, 8人參與, 6年前最新討論串1/4 (看更多)
開發平台(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

09/05 11:30, 6年前 , 1F
意思是你不能把 const T * 丟給 T *
09/05 11:30, 1F

09/05 12:28, 6年前 , 2F
先宣告變數產生記憶體位置才能用指標指向變數
09/05 12:28, 2F

09/05 12:46, 6年前 , 3F
void *addr改成宣告 const char *addr
09/05 12:46, 3F

09/05 12:49, 6年前 , 4F
這個寫法在純C是OK的,看起來是C++比較嚴格
09/05 12:49, 4F

09/05 15:41, 6年前 , 5F
工具type checking變嚴是趨勢, 加上強制轉型str = (char*
09/05 15:41, 5F

09/05 15:41, 6年前 , 6F
) "world"; 及 add = (void*) str; 符合等號左邊即可,
09/05 15:41, 6F

09/05 15:41, 6年前 , 7F
早期c的type checking很鬆, 所以有些舊書或教學打在新工
09/05 15:41, 7F

09/05 15:41, 6年前 , 8F
具上會報錯,還有這支例子不適合學hello world的新手
09/05 15:41, 8F

09/07 03:29, 6年前 , 9F
因為你複製的是 C code 不是 C++ code
09/07 03:29, 9F

09/08 20:37, 6年前 , 10F
請問c++ 的*char預設是const嗎 不然為什麼第二次assign
09/08 20:37, 10F

09/08 20:37, 6年前 , 11F
str的時候會跳那個error 感謝
09/08 20:37, 11F

09/08 23:01, 6年前 , 12F
樓上想問的應該是用 "" 括起來的 literal
09/08 23:01, 12F

09/08 23:01, 6年前 , 13F
是這個的話那沒錯, C++ 的字串 literal 都有 const
09/08 23:01, 13F
文章代碼(AID): #1TS6N6u3 (C_and_CPP)
文章代碼(AID): #1TS6N6u3 (C_and_CPP)