C++ Wchar不能为空,除非;wcout“;习惯于
我将从一个源代码示例开始(为了清晰起见,我对其进行了修改,以便忽略“someLetter”之类的变量):C++ Wchar不能为空,除非;wcout“;习惯于,c++,visual-studio-2013,wchar-t,C++,Visual Studio 2013,Wchar T,我将从一个源代码示例开始(为了清晰起见,我对其进行了修改,以便忽略“someLetter”之类的变量): wchar\u t*someFunction() { wchar_t str[1024]=L”“; 对于(int i=0;i这个代码在返回本地变量的地址时不能工作。wchar_t str[1024]的内存将被释放,直到someFunction()返回给调用方 侧节点:应该是str[50]=L'\0'和非str[51]=L'\0' 要使代码正常工作,您可以使用std::wstring并返回它的
wchar\u t*someFunction()
{
wchar_t str[1024]=L”“;
对于(int i=0;i<50;i++)
{
str[i]=someLetter;
}
str[51]=L'\0';
返回str;
}
上面的代码只是将wchars添加到w_char数组中,当for循环结束时,它以L'\0'结束数组。变量ret应该包含字符串。
然而,当我执行下面的代码时,我什么也得不到(空字符串)
wchar_t*result=someFunction();
wcout返回局部变量的地址时,此代码无法工作。wchar_t str[1024]的内存将被释放,直到someFunction()返回给调用方
侧节点:应该是str[50]=L'\0'代码>和非str[51]=L'\0'
要使代码正常工作,您可以使用std::wstring
并返回它的副本,或者使用new[]为堆上的str分配内存,稍后再删除它
你可能应该更熟悉C++,然后再问这样的问题。
< p>这个代码在返回本地变量的地址时不能工作。wchar_t str[1024]的内存将被释放,直到someFunction()返回给调用方
侧节点:应该是str[50]=L'\0'代码>和非str[51]=L'\0'
要使代码正常工作,您可以使用std::wstring
并返回它的副本,或者使用new[]为堆上的str分配内存,稍后再删除它
你可能应该更熟悉C++,然后再问这样的问题。
< p>这个代码在返回本地变量的地址时不能工作。wchar_t str[1024]的内存将被释放,直到someFunction()返回给调用方
侧节点:应该是str[50]=L'\0'代码>和非str[51]=L'\0'
要使代码正常工作,您可以使用std::wstring
并返回它的副本,或者使用new[]为堆上的str分配内存,稍后再删除它
你可能应该更熟悉C++,然后再问这样的问题。
< p>这个代码在返回本地变量的地址时不能工作。wchar_t str[1024]的内存将被释放,直到someFunction()返回给调用方
侧节点:应该是str[50]=L'\0'代码>和非str[51]=L'\0'
要使代码正常工作,您可以使用std::wstring
并返回它的副本,或者使用new[]为堆上的str分配内存,稍后再删除它
你可能应该更熟悉C++,然后再问这样的问题。
< p>你返回一个自动存储的指针,当代码>某个函数< /C>结束时,它就超出了范围,所以没有正确的行为;如果在变量超出范围后访问该变量,将发生什么是未定义的。如果确实需要返回wchar\u t*
,则需要使用静态数组,将指向缓冲区的指针传递到someFunction
,或者动态分配内存(并让调用方负责释放该内存)。最好的做法可能是使用std::wstring
而不是原始的wchar\u t*
s。当someFunction
结束时,返回一个指向超出范围的自动存储的指针,因此没有正确的行为;如果在变量超出范围后访问该变量,将发生什么是未定义的。如果确实需要返回wchar\u t*
,则需要使用静态数组,将指向缓冲区的指针传递到someFunction
,或者动态分配内存(并让调用方负责释放该内存)。最好的做法可能是使用std::wstring
而不是原始的wchar\u t*
s。当someFunction
结束时,返回一个指向超出范围的自动存储的指针,因此没有正确的行为;如果在变量超出范围后访问该变量,将发生什么是未定义的。如果确实需要返回wchar\u t*
,则需要使用静态数组,将指向缓冲区的指针传递到someFunction
,或者动态分配内存(并让调用方负责释放该内存)。最好的做法可能是使用std::wstring
而不是原始的wchar\u t*
s。当someFunction
结束时,返回一个指向超出范围的自动存储的指针,因此没有正确的行为;如果在变量超出范围后访问该变量,将发生什么是未定义的。如果确实需要返回wchar\u t*
,则需要使用静态数组,将指向缓冲区的指针传递到someFunction
,或者动态分配内存(并让调用方负责释放该内存)。最好的办法可能是使用std::wstring
而不是原始的wchar\t*
s.奇怪的是你对语言的可怕滥用。首先返回一个局部变量作为指针,然后将该指针存储在一个wchar\u t中。将wchar\u t*替换为std::wstring奇怪的是您对该语言的可怕滥用。首先返回一个局部变量作为指针,然后将该指针存储在一个wchar\u t中。将wchar\u t*替换为std::wstring奇怪的是您对该语言的可怕滥用。首先返回一个局部变量作为指针,然后将该指针存储在一个wchar\u t中。将wchar\u t*替换为std::wstring奇怪的是您对该语言的可怕滥用。首先返回一个局部变量作为指针,然后将该指针存储在一个wchar_t中。最后一句用std::wstring-1替换wchar_t*。判断用户的知识水平不是你的工作。如果你认为,这个特别的问题是
wchar_t *someFunction()
{
wchar_t str[1024] = L"";
for (int i = 0; i < 50; i++)
{
str[i] = someLetter;
}
str[51] = L'\0';
return str;
}
wchar_t *result = someFunction();
wcout << result << endl;
wchar_t *result = someFunction();
wcout << result << endl;
wchar_t *result = someFunction();
wcout << result << endl;