解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”

在使用旧工程中的函数时, 在VS 2017上编译出现如上问题, 但是该函数在之前的版本上可以正常编译, 怎么会出现这问题呢?难道不向前兼容, 不应该, 一定是哪里没设置好, 在找资料查询之后, 还是找到了, 记录下, 方便大家也方便自己.

1. 编译错误显示图解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第1张图片

根据错误提示, 尝试修改字符集, 应该可以解决.

2. 修改字符集, 采用多字节字符集

解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第2张图片
解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第3张图片

3. 重新编译

解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第4张图片

重新编译, 还是出错, 但已经不是刚才的错误了, 说是函数不安全, 这下就有眉目了, 使用宏告诉编译器不必理会即可.

4. 在预处理器定义中添加宏解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第5张图片

解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第6张图片

解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第7张图片

5. 设置完之后, 重新编译工程, 则不会再报错, 编译通过

解决 C2664 “char *strcpy(char *,const char *)”: 无法将参数 2 从“CString”转换为“const char *”_第8张图片

最后, 我再VS 2017之前的版本上又重新试了下工程, 发现之前的版本只需要修改下字符集即可, 而在VS 2017上必须要在预处理器中添加宏定义才可以, 可以得出, VS 2017对代码的安全性提高了很多, 底层又做了很多开关, 限制. 总体来说, 还是很人性化的.

你可能感兴趣的:(嵌入式)