为什么不能将TCHAR*转换为char*

Chr*_*erw 8 c++ visual-studio visual-studio-2010-beta-2

错误C2664:'strcpy':无法将参数1从'TCHAR*'转换为'char*'代码:

LPCTSTR name, DWORD value
strcpy (&this->valueName[0], name);
Run Code Online (Sandbox Code Playgroud)

错误C2664:'strlen':无法将参数1从'LPCTSTR'转换为'const char*'

LPCTSTR name; 
strlen (name)     
Run Code Online (Sandbox Code Playgroud)

以上代码在另一个项目中工作正常的类,我找不到它在MS VS2010项目中不起作用的原因.

Goz*_*Goz 13

定义_UNICODE时,需要使用wcstombs等函数.或者只是在TCHAR字符串上使用_tcslen(在Generic-Text Routine Mappings下查看),编译器会将它传输到strlen或wcslen,具体取决于您是否使用unicode.


vil*_*pam 7

可能是因为TCHAR被定义为你的一个项目中的char,而不是VS2010中可能是wchar_t的那个.

如果您的项目定义了UNICODE/_UNICODE,这与在项目设置中将其指定为Unicode构建相同,则TCHAR将为wchar_t.

您基本上需要决定是否使用Unicode,如果这样做,您需要将常规调用strncpy等更改为宽字符等效或使用改变与TCHAR相同方式的t变体.查看strncpy或其他函数的帮助,以查看调用wide或t变量的内容.

您还可以查看MSDN以获取strcpy调用,您可以在其中看到wide-char版本称为wcscpy,而t版本称为_tcscpy.如果你打算在不同项目中使用UNICODE或不使用UNICODE的代码,或者做出明智的决定你将使用哪一个然后坚持下去,我建议你坚持使用t版本.哪个更好取决于我会说的情景,并可能会引用一些"宗教"意见......