C4996:'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
使用C语言中字符串的处理函数提示错误
*需包含头文件"string.h"
#include "string.h"
以strcpy函数为例
原型:strcpy(str1, str2);
功能:将字符串str2赋值到字符串str1中。可以用来为字符串赋值
注意:1)会把str1原始字符串全部覆盖;2)str2的长度不能超过str1定义的长度
char str1[]="We are csdn!";
char str2[]="Hello!";strcpy(str1,str2);
printf("str1 = %s\n",str1);
//结果:str1 = Hello!
在VS2017中,如果直接这样写会提示如下错误:
原因解释:
这种微软的警告,主要因为那些C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以获知,在使用时也再查看一下MSDN详细了解。
处理方法:
1)项目属性->C/C++->预处理器->预处理器定义中添加:_CRT_SECURE_NO_WARNINGS
2)使用提示的strcpy_s代替strcpy
现在我们来检验一下注意当中的第二条:str2的长度不能超过str1定义的长度
我们改变一下代码,让str2的长度大于str1的长度,同时采用处理方法中的第一条,还是使用strcpy函数:
char str1[] = "We are csdn!";
char str2[] = "Hello we are csdn!";strcpy(str1, str2);
printf("str1 = %s\n", str1);
//结果:str1 = Hello we are csdn!
我们得到了正确结果:
现在我们不采用第一种处理方法,而采用第二种处理方式,使用strcpy_s函数代替strcpy函数:
char str1[] = "We are csdn!";
char str2[] = "Hello we are csdn!";strcpy_s(str1, str2);
printf("str1 = %s\n", str1);
//结果:str1 = Hello we are csdn!
运行后提示如下错误:
这个错误就是字符组数组越界了,这是因为strcpy_s函数检测了str1的长度是否大于str2的长度,发现并不满足str1的长度大于str2的长度,所以提示错误,然而strcpy函数却没有这种检测,所以得出了正确结果,但这是极其危险的,因为这种方式修改了没有在定义中的内存,会恶意改写没有经过系统分配的内存。
所以不管使用哪种处理方式,我们都应该注意字符串的长度,避免这种潜在的危险性,推荐第二种处理方式,这样会有检测,避免危险性
strcpy函数检测
char str1[] = "We are csdn!";
char str2[] = "Hello We are csdn!";int size1 = strlen(str1); //size1=12
int size2 = sizeof(str1); //size2=13strcpy(str1, str2);int size3 = strlen(str1); //size3=18
int size4 = sizeof(str1); //size4=13
从中也可以发现strlen函数与sizeof函数的区别,strlen函数计算字符串的长度,但不包括字符'\0',但sizeof函数计算整个这个字符串数组占内存的大小,包括字符'\0';在把字符串str2复制到str1中后,字符串的长度已经超过了字符串数组的长度了,这是危险的,但我们发现这时字符串的长度以改变,但字符串数组的大小并没有改变
C4996:'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.相关推荐
- warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
使用VS2005以上版本(VS2005.VS2008.VS2010)编译在其他编译器下正常通过的C语言程序,你可能会遇到类似如下的警告提示: 引用内容 warning C ...
- error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
今天编写C++程序在使用头文件#include<cstring>中的strcpy()和strcat()函数时出现了一个错误:error C4996: 'strcpy': T ...
- 解决VS2017中出现'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead这问题
当运行C++程序时,出现下面错误: 1>------ Build started: Project: Windows 编程, Configuration: Debug Win32 ------ ...
- error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead.
Hello,everyone! 我是鲁班·,一个热衷于科研和软开的胖子! 出现这个错误时,是因为strcpy函数不安全造成的溢出. 解决方法是:找到[项目属性],点击[C++]里的[预处理器],对[预 ...
- Visual Stdio2013 编译错误【error C4996:'scanf':This function or variable may be unsafe.】最简单的解决方法
(请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 在Visual Studio 2013中编译 C 语言项 ...
- VC2019编译报错 error C4996: This function or variable may be unsafe
[问题描述] 使用新安装的VS2019编译C代码保报错error C4996: 'sprintf': This function or variable may be unsafe. Consider ...
- VS编译器提示:C4996 ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead.的解决方法
博主在使用VS2019编译器运行c代码时控制台提示:错误 C4996 'scanf': This function or variable may be unsafe. Consider using ...
- 【C++】错误 C4996 ‘localtime‘:This function or variable may be unsafe.
char ch[64]; strftime(ch, sizeof(ch), "%Y-%m-%d-%H-%M-%S", localtime(&t)); //年-月-日 时-分 ...
- 【我的C语言学习进阶之旅】解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.
一.问题描述 今天在Visual Studio 2019中写一段C语言的代码,发生生成错误.弹框如下: 点击[否(N)],提示如下: 错误具体信息为: 错误 C4996 'fscanf': This ...
最新文章
- oracle-SYSTEM表空间的备份与恢复
- PHP base64数据与图片的互相转换
- php如何检测键盘按键,js键盘事件,判断按下的是哪个键
- 【Dart学习】-- Dart之泛型
- python自动登录qq空间_python 利用splinter组件,自动登录QQ空间
- 10种进阶方法让你快速测试端口连通性
- 再看中国互联网web2.0百强名单
- macOS Monterey 12.0 Beta版 With Clover 5136 and OC 0.7.0 and PE 三EFI分区原版黑苹果镜像
- 0x8000FFFF(0X8000FFFF,WPS)
- U盘装机大师安装GHOST WIN10系统
- STM32CubeIDE的一点使用技巧
- 音乐外链生成php,如何使用php生成短链接网址 第三方API
- 理解类8583报文协议
- java国际化转换_java 实现国际化 中英文语言切换
- C++实现输出一个集合的全部子集
- 入行大数据,需要学习哪些基础知识?
- W7系统如何增大C盘空间(动态磁盘)
- 赚钱的方式,很有道理!!!!
- 高数 01.06极限存在准则
- 哈工大《微积分》——一元积分学与微分方程
热门文章
- 【Java】Java实现找图抓色
- 傅里叶级数、傅里叶变换、短时傅里叶变换 公式
- idea怎么看jdk版本_怎么看自己的jdk版本
- SHA224和SHA256哈希算法原理及实现(附源码)
- 转发(Forward)和重定向(Redirect)的区别
- OSChina 周三乱弹 —— 生活终于对我这只小猫咪动手啦
- List.toArray
- 纽约大学计算机和信息科学专业排名,纽约大学计算机科学与信息系统世界排名2021年最新排名第21(QS世界排名)...
- SpringBoot_liquibase使用
- TCP接收窗口--确定Window