首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将PCHAR*转换为TCHAR*?

如何将PCHAR*转换为TCHAR*?
EN

Stack Overflow用户
提问于 2020-12-29 16:36:30
回答 1查看 153关注 0票数 0

我正在寻找将PCHAR*变量转换为TCHAR*的方法,而不需要在Visual中发出任何警告(这是必需的)?在网上查看时,如果没有警告,我就找不到这样做的函数或方法。也许有人遇到过类似的事?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-12-30 03:55:01

PCHAR*变量转换为TCHAR*

  • PCHAR是一个解析为char*typedef,所以PCHAR*的意思是

  • TCHAR是指向"wide“wchar_t或”窄“wchar_t的宏#defined。

在这两种情况下,您都不能(安全地)在char **和简单的字符指针之间进行转换,因此下面的问题实际上是关于将PCHAR转换为TCHAR*的问题。

PCHAR在ANSI构建中是相同的TCHAR*,在这种情况下不需要转换,因此可以进一步假定问题是关于Unicode构建的。

-- PCHAR来自函数声明(不能更改),TCHAR来自GetCurrentDirectory。我想连接使用_tcscat_s的2,但我需要首先转换PCHAR。

在窄字符串和宽字符串之间转换的一般问题以前已经回答过,例如请参阅Convert char * to LPWSTRHow to convert char* to LPCWSTR?。但是,在这种特殊情况下,您可以在选择一般方法之前对备选方案进行权衡。

  1. 将您的构建设置更改为ANSI,而不是Unicode,然后不需要进行转换。

这就像确保在编译时没有定义UNICODE_UNICODE宏一样容易,或者在IDE中将项目配置属性/高级/字符集从使用Unicode字符集更改为不设置或使用多字节字符集。

免责声明:现在针对8位Windows代码页进行编译是逆行的.我是,不是的建议,这样做意味着许多国际字符不能按字面意思表达。但是,链的强度只有其最弱的一个环节,如果您被迫使用由外部函数返回的不能更改的窄字符串,那么这就限制了在其他地方使用完整Unicode的有用性。

  1. 将构建保持为Unicode,但只更改连接代码以使用ANSI字符串。

这可以通过显式调用API的ANSI版本GetCurrentDirectoryA来实现,该版本返回一个窄字符串。然后,您可以直接与另一个strcat字符串进行PCHAR

  1. 保持原样,但是使用[w]printf而不是_tcscat_s组合窄字符串和宽字符串。

char szFile[] = "test.txt";PCHAR pszFile = szFile;//窄字符串来自ext函数wchar_t wszDir_MAX_PATH;GetCurrentDirectoryW(_MAX_PATH,wszDir);//宽字符串来自自己的代码wchar_t wszPath_MAX_PATH;wsprintf(wszPath,L“%ws\hs”,wszDir,pszFile);//组合成宽字符串

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65495515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档