在项目中,我需要为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);
当我将字符集配置更改为“未设置”或“多字节字符集”时 项目编译没有任何错误。
请建议我应该采取什么措施来解决这个问题。
感谢任何可能的建议。
拉克希米。
答案 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 *。
这里有三种基本解决方案:
2中没有实际意义,没有主流操作系统不是原生Unicode。