c++ - 二维 wchar_t 字符串数组的简单示例

标签 c++ c

有人可以解释为什么下一个代码输出 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/

相关文章:

c++ - 在 ReSharper C++ 中完成 'XML Doc Comment'

c - 为什么这个简单的循环在 Go 中比在 C 中更快?

java - JNI 访问数组的数组

c - OpenMP 中有默认范围分隔符吗?

c - 这个保存的数组与加载的数组有什么不同?

c - 将BLAS中的三个矩阵相乘,中间一个是对角线

c++ - 使用 Boost.Beast 异步读取 header

c++ - 从基本模板对方法的调用无法编译

c++ - 机器的基本字符集

c++ - 如何 move 构建 C++ STL 映射?