看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) visual studio 2015 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 想請問是不是vector使用上哪裡出了問題導致非預期的結果,謝謝!!!!! 預期的正確結果(Expected Output): 0 1 錯誤結果(Wrong Output): 1 1 程式碼(Code):(請善用置底文網頁, 記得排版) vector<WCHAR*> pList; for (int ndx = 0; ndx < 2; ndx++) { string name = to_string(ndx); int len2 = strlen(name .c_str()) + 1; char outch2[MAX_PATH]; WCHAR * wChar2 = new WCHAR[len2]; wChar2[0] = 0; MultiByteToWideChar(CP_UTF8, 0, name .c_str(), len2, wChar2, len2); WideCharToMultiByte(CP_ACP, 0, wChar2, len2, outch2, len2, 0, 0); delete[] wChar2; char* pchar2 = (char*)outch2; len2 = strlen(pchar2) + 1; WCHAR outName2[MAX_PATH]; MultiByteToWideChar(CP_ACP, 0, pchar2, len2, outName2, len2); pList.push_back(outName2); } for (int ndx = 0; ndx < pList.size(); ndx++) { printf("%S\n", pList[ndx]); } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.159.98.17 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1517590482.A.608.html ※ 編輯: meone (49.159.98.17), 02/03/2018 00:56:15
steve1012: 排一下吧大哥 講清楚你想幹嘛 擠在一團滑手機不想細看 02/03 00:59
steve1012: 啊 02/03 00:59
steve1012: vector 放的指標是不是指向會被 destruxt 的 object? 02/03 01:23
LPH66: 問題在於你把同一個陣列 (的開頭指標) 推進 vector 兩次 02/03 12:50
LPH66: 一般來說陣列不會以這種型式包在 vector 裡 02/03 12:53
LPH66: 以你的問題來說, 因為是寬字元字串的關係 02/03 12:57
LPH66: 或許可以使用 basic_string<WCHAR> 來解決 02/03 12:57
LPH66: 它跟一般的 C++ string 物件幾乎一樣, 只差在字元是 WCHAR 02/03 12:58
LPH66: 一些細節上的使用可能需要注意就是 02/03 12:59
peterwu4: 我好無聊,竟然幫忙看了… 預期的輸出是兩行0和1嘛? 02/03 13:11
peterwu4: 輸出是1 1是因為0那一個WCHAR array被後一個蓋掉了 02/03 13:13