如何将 CString 转换或转换为 LPWSTR?

新手上路,请多包涵

我尝试使用此代码:

 USES_CONVERSION;
LPWSTR temp = A2W(selectedFileName);

但是当我检查 temp 变量时,只需获取第一个字符

提前致谢

原文由 Luis Gabriel Fabres 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 813
1 个回答

如果我没记错的话, CString 的类型定义为 CStringACStringW ,具体取决于您是否正在构建 Unicode。

LPWSTR 是“指向宽字符串的长指针”——又名: wchar_t*

如果您想将 --- 传递给采用 LPWSTR CString 的函数,您可以执行以下操作:

 some_function(LPWSTR str);

// if building in unicode:
some_function(selectedFileName);

// if building in ansi:
some_function(CA2W(selectedFileName));

// The better way, especially if you're building in both string types:
some_function(CT2W(selectedFileName));

但是 --- LPWSTR 是对字符串的非常量访问。您是否正在使用尝试修改字符串的函数?如果是这样,您想使用实际缓冲区,而不是 CString

另外,当您“检查”时 temp 您是什么意思?你试过 cout << temp 吗?因为那行不通(它只会显示第一个字符):

char 每个字符使用一个字节。 wchar_t 每个字符使用两个字节。对于纯英语,当您将其转换为宽字符串时,它使用与原始字符串相同的字节,但每个字符都用零填充。由于 NULL 终止符也是零,如果您使用较差的调试器或 cout(使用 ANSI 文本),您将只能看到第一个字符。

如果要将宽字符串打印到标准输出,请使用 wcout

原文由 Tim 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题