[問題] 字元指標的問題

作者: allssddaa (屌炸天)   2019-09-05 09:32:52
開發平台(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):
按照網站的教學宣告一個字元的指標
但是編譯卻出錯誤
直接複製網站的也是這樣
請問是什麼問題呢
網站教的是錯的嗎?
作者: Lipraxde (Lipraxde)   2019-09-05 11:30:00
意思是你不能把 const T * 丟給 T *
作者: tw4563335 (tw4563335)   2019-09-05 12:28:00
先宣告變數產生記憶體位置才能用指標指向變數
作者: Gway (我愛的你 也愛我 好嗎?)   2019-09-05 12:46:00
void *addr改成宣告 const char *addr
作者: james732 (好人超)   2019-09-05 12:49:00
這個寫法在純C是OK的,看起來是C++比較嚴格
作者: kaneson (Lance)   2019-09-05 15:41:00
工具type checking變嚴是趨勢, 加上強制轉型str = (char*) "world"; 及 add = (void*) str; 符合等號左邊即可,早期c的type checking很鬆, 所以有些舊書或教學打在新工具上會報錯,還有這支例子不適合學hello world的新手
作者: loveme00835 (髮箍)   2019-09-07 03:29:00
因為你複製的是 C code 不是 C++ code
作者: dces4212 (flawless)   2019-09-08 20:37:00
請問c++ 的*char預設是const嗎 不然為什麼第二次assignstr的時候會跳那個error 感謝
作者: LPH66 (-6.2598534e+18f)   2019-09-08 23:01:00
樓上想問的應該是用 "" 括起來的 literal是這個的話那沒錯, C++ 的字串 literal 都有 const

Links booklink

Contact Us: admin [ a t ] ucptt.com