我正在将一个较旧的Visual Studio项目更新到VS2013并继续遇到一个问题,它不喜欢我传递给strcpy
函数的参数。
这是一个Unicode应用程序
我收到了错误 -
无法从' CString'转换参数2到' const char *'
strcpy(szFileName, m_strFileName);
m_strFileName
被定义为CString
。
答案 0 :(得分:2)
strcpy
函数仅接受char*
类型的参数。这就是编译器错误告诉你的 - 你有一个类型不匹配错误。在Windows环境中,char*
表示 narrow (即,ANSI)字符串。十多年来,没有人再使用,也没有人使用。
你已经知道了;你说你正在构建一个Unicode应用程序,这就是你应该做的。但这意味着您无法再调用窄字符串函数(str*
)。你有两个选择。之一:
明确地拨打" wide" (即,Unicode)C字符串库函数的变体,以wcs
而不是str
为前缀。在这种情况下,您可以拨打wcscpy
。
使用自动映射到C字符串库函数的正确变量的宏。如果定义了_UNICODE
符号(就像它一样),它们将映射到宽字符串变体;否则,它们会映射到窄弦变体。这些函数(实际上是宏)都以_tcs
为前缀。在这种情况下,您可以拨打_tcscpy
。