C++ Can';无法从wstring获取wchar\u t*

C++ Can';无法从wstring获取wchar\u t*,c++,pointers,wchar-t,wstring,C++,Pointers,Wchar T,Wstring,我尝试通过函数调用更改wchar\u t*变量的值 我使用指针(),当将char*分配给char*或wchar\t*分配给wchar\t*时,它工作正常。但如果我尝试获取wstring值并将其分配给wchar\u t*变量函数调用会产生垃圾/无 我尝试从中讨论的wstring转换,以及 代码示例: #include <xstring> void newval(wchar_t **w0, wchar_t **w1, wchar_t **w2, wchar_t **w3, const

我尝试通过函数调用更改
wchar\u t*
变量的值

我使用指针(),当将
char*
分配给
char*
wchar\t*
分配给
wchar\t*
时,它工作正常。但如果我尝试获取
wstring
值并将其分配给
wchar\u t*
变量函数调用会产生垃圾/无

我尝试从中讨论的
wstring
转换,以及

代码示例:

#include <xstring>

void newval(wchar_t **w0, wchar_t **w1, wchar_t **w2, wchar_t **w3, const wchar_t **w4) {
    //wchar_t* to wchar_t* works fine
    *w0 = L"new wchar";

    std::wstring ws = L"new wstring";
    *w1 = &ws[0];
    *w2 = const_cast<wchar_t*>(ws.c_str());
    //just in case
    *w3 = (wchar_t*)ws.c_str();
    *w4 = ws.c_str();
}

void main() {
    wchar_t *v0 = L"";
    wchar_t *v1 = L"";
    wchar_t *v2 = L"";
    wchar_t *v3 = L"";
    const wchar_t *v4 = L"";

    newval(&v0, &v1, &v2, &v3, &v4);

    fprintf(stdout, "New wchar_t: %ws", v0);
    fprintf(stdout, "\nNew wchar_t from &wstring[0]: %ws", v1);
    fprintf(stdout, "\nNew wchar_t from const_cast<wchar_t*>(wstring.c_str()): %ws", v2);
    fprintf(stdout, "\nNew wchar_t from (wchar_t*)ws.c_str(): %ws", v3);
    fprintf(stdout, "\nNew wchar_t from wstring.c_str(): %ws", v4);
}
#包括
void newval(wchar\u t**w0、wchar\u t**w1、wchar\u t**w2、wchar\u t**w3、const wchar\u t**w4){
//wchar_t*到wchar_t*工作正常
*w0=L“新wchar”;
std::wstring ws=L“新wstring”;
*w1=&ws[0];
*w2=常量转换(ws.c_str());
//以防万一
*w3=(wchar_t*)ws.c_str();
*w4=ws.c_str();
}
void main(){
wchar_t*v0=L“”;
wchar_t*v1=L“”;
wchar_t*v2=L“”;
wchar_t*v3=L“”;
常数wchar_t*v4=L“”;
新值(&v0、&v1、&v2、&v3、&v4);
fprintf(标准值,“新wchar\u t:%ws”,v0);
fprintf(stdout,“\n来自&wstring[0]:%ws”的新字符,v1);
fprintf(stdout,“\n从const_cast(wstring.c_str()):%ws,”\n新的wchar_t,v2);
fprintf(stdout,“\n来自(wchar_t*)ws.c_str():%ws”的新wchar_t,v3);
fprintf(stdout,“\n来自wstring.c_str():%ws的新wchar”,v4);
}
输出:

New wchar_t: new wchar  
New wchar_t from &wstring[0]:  
New wchar_t from const_cast<wchar_t*>(wstring.c_str()):  
New wchar_t from (wchar_t*)ws.c_str():  
New wchar_t from wstring.c_str():  
New wchar\t:New wchar
来自&wstring[0]的新wchar\u t:
来自const_cast(wstring.c_str())的新wchar\u t:
来自(wchar_t*)ws.c_str()的新wchar\u t:
来自wstring.c_str()的新wchar\u t:
我的代码有什么问题,如何使用
wstring
值更改
wchar\u t*
变量


另外,如果输出未格式化为代码,我将无法提交问题。

为什么要使用这么多指针?使用string类应该可以减少这样的操作,而不是增加指针的使用。另外,它很可能是垃圾数据,因为
ws
是一个本地字符串,并且您希望绑定到它的
c_str()
在函数调用后以某种方式处于活动状态。您的ws对象在退出函数后被销毁-因此存储到其内容的所有指针都处于悬挂状态,不应在此函数之外使用。这个问题与你想问的问题无关。这与返回指向任何其他局部变量的指针是一样的,您不应该这样做。好的,谢谢你们。我调用C++函数,它是从C源中使用<代码> WScord,我不能在C.中找到如何使用<代码> WStRe>代码>,所以我使用<代码> WCARGET**/COD>作为输入(从<代码> WCARUT**<代码>转换为<代码> WStRe>代码>很好。将
wstring
内容复制到指向
wchar\u t*
变量的指针上效果很好。再次感谢。为什么要使用这么多指针?使用string类应该可以减少这样的操作,而不是增加指针的使用。另外,它很可能是垃圾数据,因为
ws
是一个本地字符串,并且您希望绑定到它的
c_str()
在函数调用后以某种方式处于活动状态。您的ws对象在退出函数后被销毁-因此存储到其内容的所有指针都处于悬挂状态,不应在此函数之外使用。这个问题与你想问的问题无关。这与返回指向任何其他局部变量的指针是一样的,您不应该这样做。好的,谢谢你们。我调用C++函数,它是从C源中使用<代码> WScord,我不能在C.中找到如何使用<代码> WStRe>代码>,所以我使用<代码> WCARGET**/COD>作为输入(从<代码> WCARUT**<代码>转换为<代码> WStRe>代码>很好。将
wstring
内容复制到指向
wchar\u t*
变量的指针上效果很好。再次感谢你。