This question already has answers here:
Can a local variable's memory be accessed outside its scope?
                                
                                    (20个答案)
                                
                        
                        
                            How to return local array in C++?
                                
                                    (12个答案)
                                
                        
                                4年前关闭。
            
                    
麻烦从源代码的示例开始(为了清楚起见,我对其进行了修改,因此请忽略诸如“ someLetter”之类的变量):

wchar_t *someFunction()
{
    wchar_t str[1024] = L"";

    for (int i = 0; i < 50; i++)
    {
        str[i] = someLetter;
    }

    str[51] = L'\0';

    return str;
}


上面的代码只是将wchars添加到w_char数组,并且当for循环结束时,它将以L'\ 0'结束数组。变量ret应该包含字符串。
但是,当我执行以下代码时,我什么也没得到(空字符串)。

wchar_t *result = someFunction();
wcout << result << endl;




这是奇怪的地方。如果我执行上面提到的代码,我什么也没有。但是如果我在someFunction()中添加wcout << str << endl;,一切似乎都可以正常工作,即下面的代码执行了它应该做的事情。

wchar_t *result = someFunction();
wcout << result << endl;




TL:DR
下面的代码不会打印出“结果”。而是不打印任何内容,结果为空白。如果将wcout << str<< endl;添加到someFunction(),则此问题已解决。为什么会这样,我如何避免这种情况。

wchar_t *result = someFunction();
wcout << result << endl;

最佳答案

您将返回一个指向自动存储的指针,该指针在someFunction结束时超出范围,因此没有正确的行为。它是不确定的,如果超出范围后访问变量,将会发生什么。如果确实需要返回wchar_t*,则需要使用静态数组,将指向缓冲区的指针传递到someFunction或动态分配内存(并使调用者负责释放该内存)。最好的办法可能是使用std::wstring而不是原始的wchar_t*

关于c++ - 除非使用“wcout”,否则Wchar_t为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31684282/

10-16 04:17