[問題] LPCWSTR轉換 已解決

看板C_and_CPP (C/C++)作者 (K.L)時間15年前 (2011/01/20 21:23), 編輯推噓9(9022)
留言31則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS 2008 問題(Question): char name[20]; cout<<"請輸入欲開啟檔案之名稱:\n"<<endl; cin>> name; LPCWSTR ppp=(WCHAR *)name; 開檔時會顯示錯誤@ @? 預期的正確結果(Expected Output): 已解決 感謝 錯誤結果(Wrong Output): 補充說明(Supplement): 感謝各位的指導 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.191.88

01/20 21:26, , 1F
字串前加L,比如: L"c:\files.txt"
01/20 21:26, 1F

01/20 21:28, , 2F
字串前加了L後可以編過,但沒有跑小畫家@ @
01/20 21:28, 2F

01/20 21:33, , 3F
第三段改成 L"mspaint.exe." 感謝一樓幫忙
01/20 21:33, 3F

01/20 21:37, , 4F
除了L"", ""裡括起來的 \ 應該要改成 \\ 兩個吧@_@"
01/20 21:37, 4F

01/20 21:38, , 5F
不過, 如果可以用環境變數取代定死的路徑也許會通用點@@
01/20 21:38, 5F

01/20 21:43, , 6F
想請問樓上 char name[20]; 要怎麼取代掉他@_@?
01/20 21:43, 6F

01/20 21:43, , 7F
想說檔名是活得比較好@ @ 感謝!!
01/20 21:43, 7F
※ 編輯: kimgtob 來自: 140.116.191.88 (01/20 21:46)

01/20 21:50, , 8F
檔名是活的當然是最好啊, 看是傳動態的wchar string還是
01/20 21:50, 8F

01/20 21:51, , 9F
怎樣囉:) 至於說用環境變數是像 %SystemRoot% 這樣的東
01/20 21:51, 9F

01/20 21:51, , 10F
西取代你寫死的"C:\\Windows", 因為未必windows的安裝目
01/20 21:51, 10F

01/20 21:52, , 11F
碌都一定在C:\Windows; 不過如果你想執行的東西在PATH定
01/20 21:52, 11F

01/20 21:52, , 12F
義裡就沒差了. 我也不曉得寫%SystemRoot%在ShellExec裡
01/20 21:52, 12F

01/20 21:52, , 13F
到底能不能work....XD
01/20 21:52, 13F

01/20 22:00, , 14F
感謝V大 研究字串中@ @
01/20 22:00, 14F

01/20 22:11, , 15F
wchar_t
01/20 22:11, 15F

01/20 22:12, , 16F
被抓包少了_t了XD 不過通通_T起來好像比較方便/一致Orz
01/20 22:12, 16F
※ 編輯: kimgtob 來自: 140.116.191.88 (01/20 23:08) ※ 編輯: kimgtob 來自: 140.116.191.88 (01/20 23:25)

01/21 01:15, , 17F
你得先搞清楚 (WCHAR *)name 這樣做實質上是發生什麼事.
01/21 01:15, 17F

01/21 01:16, , 18F
輸入時存入 char[], 那樣寫就自動變成 WCHAR[]....
01/21 01:16, 18F

01/21 01:18, , 19F
相對的, 你可以研究一下 wcin (與 wcout 等相關東東) :)
01/21 01:18, 19F

01/21 01:22, , 20F
上面第二推漏字: 那樣寫"不會把內容"就自動變成....
01/21 01:22, 20F

01/21 02:03, , 21F
事實上你得先搞清楚你的 console 是用什麼編碼
01/21 02:03, 21F

01/21 02:05, , 22F
然後你還必須利用 MultiByteToWideChar 去轉字元
01/21 02:05, 22F

01/21 02:05, , 23F
其實我覺得 wide stream 反而很難應用,因為 console
01/21 02:05, 23F

01/21 02:06, , 24F
通常會直接丟一個 locale-encoded 的字串
01/21 02:06, 24F

01/21 13:36, , 25F
也是, 因為他一開始的error好像直指wchar的問題, 新的問
01/21 13:36, 25F

01/21 13:36, , 26F
題則是直接轉錯東西了, 所以才直接推wcin....XD
01/21 13:36, 26F

01/21 13:37, , 27F
話說, 原po是不是修掉了原始的問題?? 這不是好習慣喔~_~
01/21 13:37, 27F

01/21 14:04, , 28F
抱歉 @@ 因為有了第二個問題
01/21 14:04, 28F

01/21 14:05, , 29F
同時間內發兩篇文好像不大好 就先把原本的刪掉
01/21 14:05, 29F

01/21 14:05, , 30F
最後解決方式好像是編碼不同的關係
01/21 14:05, 30F

01/21 14:05, , 31F
換一種方法就可以了
01/21 14:05, 31F
文章代碼(AID): #1DE3TAKM (C_and_CPP)
文章代碼(AID): #1DE3TAKM (C_and_CPP)