在C/C++(ms)中,将char[]转换为tchar[]或将tchar[]转换为char[]的最简单方法是什么?

18

这似乎是一个相当简单的问题,但我总是很难查找此函数,因为在涉及char和tchar的引用方面有很多变化。

8个回答

10

最简单的方法是使用转换宏:

  • CW2A
  • CA2W
  • 等等...

MSDN


我们不应该使用这些转换,因为如果我们在递归中调用它们,它不会释放内存。 - Vinay
@Vinay 创建一个辅助函数,调用其中一个函数,然后将结果复制到堆或另一个缓冲区中。一旦辅助函数返回,栈内存就会被释放。 - bdonlan

8

TCHAR是微软特定的typedef,可以是char或wchar_t(宽字符)。

转换为char取决于实际情况。如果TCHAR实际上是一个char,则可以进行简单的强制转换,但如果它真正是一个wchar_t,则需要使用字符集转换例程。请参见函数MultiByteToWideChar()。


你提出了一个很好的观点。虽然在这种特定情况下,我认为TChar是宽字符,但如果不是,我只需要进行转换,这是我必须以某种方式检查的。 - CrashCodes

7

4
如果TCHAR是CHAR,会发生什么? - Martin York
1
我理解问题是要求进行转换,但我明白了。 - jeffm

3

1
它怎么能够跨平台,其他地方都没有TCHAR。它是Windows特定的。 - Martin York

3
尽管在这种特定情况下,我认为TChar是宽字符,但如果不是,我必须进行转换,而我需要以某种方式进行检查。
if (sizeof(TCHAR) != sizeof(wchar_t))
{  .... }

这个很酷的地方在于等号两边都是常量,这意味着编译器会处理(并删除)if(),如果它们相等,则删除大括号内的所有内容。


2
这是 CPP 代码,可以将 _TCHAR * argv[] 复制到 char * argn[] 中。
如果您要将旧代码迁移到 Windows 平台上,只需使用代码中提到的可选定义即可。
参考链接:http://www.wincli.com/?p=72

损坏的链接(这就是为什么最好引用示例的原因:) - Fernando Gonzalez Sanchez

1
你可以在代码中加入条件语句。
如果定义了 _UNICODE,
{ //做如同 TCHAR 是宽字符的事情 }
否则,
{ //做如同 TCHAR 是字符的事情 }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接