我尝试使用此代码:

USES_CONVERSION;
LPWSTR temp = A2W(selectedFileName);

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

提前致谢

最佳答案

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

LPWSTR是“指向广泛STRing的长指针”-aka:wchar_t*
如果要将CString传递给采用LPWSTR的函数,则可以执行以下操作:

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

09-27 03:21