#include<ctime>/*调用时间库*/
#include<string>/*调用字符串库*/
#include<iostream>/*标准输入输出库*/
using namespace std;/*标准命名空间*/

#include<atlstr.h>/*非MFC程序要使用CString必须引用此库*/
#include<Windows.h>


const wchar_t* str2CTwchpt(string directory)
{
CString b;
b= directory.c_str();/**/
const wchar_t* c=b;/*这里有转换,不过当我在主函数尝试把string转成wchar_t*的时候是行得通的,只是现在变成分支函数以后就无法把c传回主函数了。*/
return c;
}

int main()
{string b;
const wchar_t * c(NULL);
cin>>b;

const wchar_t* str2CTwchpt(string);
wcout<<str2CTwchpt(b)<<endl;/*什么都不显示,本来我预期它在这里显示string b的const wchar_t*版本,当转换的代码也写入主函数成为一体的时候,是可以成功显示的*/
getchar();
return 0;
}

我猜测是因为分支函数的const wchar_t *是在分支函数内部生成的,作用域无法超越分支函数内部,回到主函数以后就被注销了,可是我已经把它设定为return的对象了啊……如果不能这样做的话,应该如何修改?

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础


1个回答

宽字符是C++流行之前,windows API用来显示ASCII以外字符的方法,它其实已经落后了,所以如果你为了要迁就它的函数,就直接把要用的函数,连同string转const wchar_t *的语句一起封装起来,再哪用,就在哪里转,不要再输出const wchar_t *了。不同的函数之间,统统使用C++标准的东西来传递,比如vector,比如string——等你的程序越来越大起来的时候你会明白这样的好处。