error C2664:char *strcpy(char *,const char *)& 无法将参数 2 从CString"转换为const char *

_tcscpy

  函数功能:
  拷贝字符串.此函数有几个不同的版本.
  函数原型:
  char *strcpy( char *strDestination, const char *strSource );
  wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );
  unsigned char *_mbscpy( unsigned char *strDestination, const unsigned char *strSource );
  常见名称 要求的头文件 兼容方案
  strcpy <string.h> ANSI, Win 95, Win NT
  wcscpy <string.h> or <wchar.h> ANSI, Win 95, Win NT
  _mbscpy <mbstring.h> Win 95, Win NT
  参数说明:
  strDestination 目标字符串指针
  strSource 源字符串指针
  返回值
  三种形式都返回目标字符串.若无返回值,则为保留情况,用来检测 错误信息.
  说明:
  strcpy函数将拷贝strSource, 包括终端的null字符,
  wcscpy and _mbscpy为宽 字节和多字节版的strcpy.其参数与返回值也是宽字节或多字节的.
-----------------
在VS2005内使用strcpy函数时,编译不通过。上网搜了一下,改用宏_tcscpy编译通过了,原因如下,转载了别人的答案:

 

一、VS2005设置Unicode或ASCII字符集问题
VS2005中开发程序时,默认的字符集是Unicode。所以如果程序中使用字符串常量时一定要显示转换为Unicode型,否则编译时报错。如:
HDC hScrDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL); //为屏幕创建设备描述表
这句如果写成:
HDC hScrDC = CreateDC("DISPLAY"),NULL,NULL,NULL);
编译时提示错误如下:
error C2664: 'CreateDCW' : cannot convert parameter 1 from 'const char [8]' to 'LPCWSTR'
根据这个错误提示我们可能会将此句改为:
HDC hScrDC = CreateDC((LPCWSTR)"DISPLAY",NULL,NULL,NULL);
这句虽然能通过编译,但最终结果却不正确(hScrDC 的值为 0)!
正确的做法有二:
一、如果你希望程序支持Unicode字符集,则可以将程序改为:
HDC hScrDC = CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
二、如果你不希望程序支持Unicode字符集,则不用改动程序。更改项目设置就可以了。
项目菜单--项目属性(最后一个)--配置属性--常规--项目默认值--字符集,(Project-> Properties-> Configurations Properties-> General-> Project Defaults-> Charater Set)将使用Unicode字符集改为未设置即可。

二、vs2005 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函数。

你可能感兴趣的:(error C2664:char *strcpy(char *,const char *)& 无法将参数 2 从CString"转换为const char *)