有人可以解释为什么下一个代码输出 26 timez 'Z' 而不是从 'A' 到 'Z' 的范围,以及我怎样才能正确输出这个数组。看代码:
wchar_t *allDrvs[26];
int count = 0;
for (int n=0; n<26; n++)
{
wchar_t t[] = {L'A' + n, '\0'};
allDrvs[n] = t;
count++;
}
int j;
for(j = 0; j < count; j++)
{
std::wcout << allDrvs[j] << std::endl;
}
最佳答案
问题(至少一个)是:
{
wchar_t t[] = {L'A' + n, '\0'};
allDrvs[n] = t; //allDrvs points to t
count++;
} //t is deallocated here
//allDrvs[n] is a dangling pointer
所以,简短的回答 - std::wcout << allDrvs[j]
行的未定义行为.
要获得正确的输出 - 有一个crappy丑陋的版本涉及数组之间的动态分配和复制。
然后是使用 std::vector<std::wstring> >
的正确版本.
关于c++ - 二维 wchar_t 字符串数组的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032623/