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”之类的变量):
上面的代码只是将wchars添加到w_char数组,并且当for循环结束时,它将以L'\ 0'结束数组。变量ret应该包含字符串。
但是,当我执行以下代码时,我什么也没得到(空字符串)。
这是奇怪的地方。如果我执行上面提到的代码,我什么也没有。但是如果我在someFunction()中添加
TL:DR
下面的代码不会打印出“结果”。而是不打印任何内容,结果为空白。如果将
(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