[問題] vector使用

作者: meone (MEONE)   2018-02-03 00:54:39
開發平台(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):
作者: steve1012 (steve)   2018-02-03 00:59:00
排一下吧大哥 講清楚你想幹嘛 擠在一團滑手機不想細看啊vector 放的指標是不是指向會被 destruxt 的 object?
作者: LPH66 (-6.2598534e+18f)   2018-02-03 12:50:00
問題在於你把同一個陣列 (的開頭指標) 推進 vector 兩次一般來說陣列不會以這種型式包在 vector 裡以你的問題來說, 因為是寬字元字串的關係或許可以使用 basic_string<WCHAR> 來解決它跟一般的 C++ string 物件幾乎一樣, 只差在字元是 WCHAR一些細節上的使用可能需要注意就是
作者: peterwu4 (notd)   2018-02-03 13:11:00
我好無聊,竟然幫忙看了… 預期的輸出是兩行0和1嘛?輸出是1 1是因為0那一個WCHAR array被後一個蓋掉了

Links booklink

Contact Us: admin [ a t ] ucptt.com