在VS2005内使用strcpy函数时,编译不通过。上网搜了一下,改用宏_tcscpy编译通过了,原因如下,转载了别人的答案:
VS2005中开发程序时,默认的字符集是Unicode。所以如果程序中使用字符串常量时一定要显示转换为Unicode型,否则编译时报错。如: |
今天一直在思考这个问题,就是微软著名的vstudio 如何保持向下兼容,简单的说就是如何能直接把vc6的工程转化为vs2005的,后来在工程配置中发现只要把默认的mfc 的工程属性改为Use Multi-Byte Character Set 即可,这样你就可以像在vc6里边的对字符的处理方法,当然unicode字符编码方式有其好处但是每次要在界面显示字母或者字符都要进行
TCHAR wStr[255] = {0};
MultiByteToWideChar(CP_ACP,MB_COMPOSITE,data.payload,256,wStr,254)的转化,很是麻烦和浪费系统的资源,所以决定下次些相关程序的时候,把工程设置改一下。可以提高开发效率。
(以上转自:http://hi.baidu.com/ncudlz/blog/item/bcf4414ca3e26afcd62afc64.html)
把strcpy函数改成wcscpy也可以编译通过。
编译错误的代码:
- void playwav(TCHAR * path)
- {
- TCHAR szPath[100];
- memset(szPath, 0, sizeof(szPath));
- strcpy(szPath, path);
- }
提示错误:
error C2664: “strcpy”: 不能将参数 1 从“TCHAR [100]”转换为“char *”
解决办法:
1、默认Unicode字符集: 使用wcscppy函数代替strcpy函数,或者使用_tcscpy宏。_tcscpy在头文件 tchar.h内定义。如果编译报错说没定义需要引用该头文件;_tcscpy会根据程序所设置的字符集选择相应的函数,如果支持Unicode字符集,_tcscpy宏使用wcscppy, 如果支持ASCII使用strcpy。
2、按照上面方法二设置,仍然使用strcpy函数。