我正在寻找将PCHAR*变量转换为TCHAR*的方法,而不需要在Visual中发出任何警告(这是必需的)?在网上查看时,如果没有警告,我就找不到这样做的函数或方法。也许有人遇到过类似的事?
谢谢!
发布于 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 LPWSTR或How to convert char* to LPCWSTR?。但是,在这种特殊情况下,您可以在选择一般方法之前对备选方案进行权衡。
这就像确保在编译时没有定义UNICODE或_UNICODE宏一样容易,或者在IDE中将项目配置属性/高级/字符集从使用Unicode字符集更改为不设置或使用多字节字符集。
免责声明:现在针对8位Windows代码页进行编译是逆行的.我是,不是的建议,这样做意味着许多国际字符不能按字面意思表达。但是,链的强度只有其最弱的一个环节,如果您被迫使用由外部函数返回的不能更改的窄字符串,那么这就限制了在其他地方使用完整Unicode的有用性。
这可以通过显式调用API的ANSI版本GetCurrentDirectoryA来实现,该版本返回一个窄字符串。然后,您可以直接与另一个strcat字符串进行PCHAR。
[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);//组合成宽字符串
https://stackoverflow.com/questions/65495515
复制相似问题