在VS 2008项目设置中使用unicode字符集

时间:2010-09-03 14:44:34

标签: visual-studio-2008

在项目中,我需要为Configuration Properties> General> Character Set设置“use unicode character set”。

在编译项目时,此代码返回错误c2664:

char Filename[25] = {0}; 
GetLocalTime(&st); 
sprintf(Filename,TEXT("C:\\CpmMicr%02d%02d%04d.log"), st.wDay,st.wMonth,st.wYear);

当我将字符集配置更改为“未设置”或“多字节字符集”时 项目编译没有任何错误。

请建议我应该采取什么措施来解决这个问题。

感谢任何可能的建议。

拉​​克希米。

2 个答案:

答案 0 :(得分:1)

非常难以在没有代码的情况下进行精确修复(请发布相关部分),但可能您尝试将char *分配给wchar *,反之亦然。 例如

std::basic_string< wchar_t > someString( "test" ); //C2664 here

应该是

std::basic_string< wchar_t > someString( L"test" );

编辑:您的代码中的问题是您使用TEXT宏,因此在一个宽字符的unicode构建中,sprintf需要使用const char *。我不知道为什么它曾经在以前版本的VS中工作?使用wsprintf并将Filename更改为宽字符,或者删除TEXT宏。

答案 1 :(得分:1)

这是因为你使用TEXT宏。如果使用_UNICODE定义编译,则会自动将L放在字符串文字之前。这会因为你使用sprintf()这个非Unicode函数而爆炸。它需要一个char *,而不是一个wchar_t *。

这里有三种基本解决方案:

  1. 删除TEXT宏
  2. 始终使用TCHAR和相应的字符串函数
  3. 在代码中使用Unicode声明,wchar_t []和swprintf()。
  4. 2中没有实际意义,没有主流操作系统不是原生Unicode。