Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Wchar不能为空,除非;wcout“;习惯于_C++_Visual Studio 2013_Wchar T - Fatal编程技术网

C++ Wchar不能为空,除非;wcout“;习惯于

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并返回它的

我将从一个源代码示例开始(为了清晰起见,我对其进行了修改,以便忽略“someLetter”之类的变量):

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;