[C++]strcpy和strcpy_s安全性比较

[C++]strcpy和strcpy_s安全性比较

http://blog.csdn.net/qqyuanhao163/article/details/47113727


我在用vs2008编译以下程序时


#include <iostream>
#include <cstring>
using namespace std;
int main()
{

    char a[5];
    char b[4]="abc";
    strcpy(a,b);
    cout<<a<<endl;
    int n;
    cin>>n;
    return 0;
}

输出窗口

复制代码
1>------ 已启动生成: 项目: Person, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>g:\学习\vs2008project\person\person\main.cpp(9) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\g460\microsoft studio 9.0\vc\include\string.h(74) : 参见“strcpy”的声明
1>正在链接...
1>正在嵌入清单...
1>生成日志保存在“file://g:\学习\VS2008Project\Person\Person\Debug\BuildLog.htm”
1>Person - 0 个错误,1 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

这里有一个警告,虽然说警告没有什么问题,但是作为一个想要成为程序员的人,不能忽视警告,警告会不小心变成错误的,所以我查了查,知道了strcpy的安全性问题,strcpy没有保证目标字符串的大小肯定够源字符串大小,它只是假设目标字符串大小够大,为了解决这个安全性问题,微软加入了一个比strcpy安全性好的复制函数,多了一个参数,strcpy_s(char &strDestination,int size,char *strSource);多了一个size的参数,


这样子上面的程序改为

#include <iostream>
#include <cstring>
using namespace std;
int main()
{

    char a[2];
    char b[4]="abc";
    strcpy_s(a,4,b);//把b复制到a中,占4个位置,注意为a[2],用法:strcpy_s(destination, sizeof (destination) / sizeof (destination[0]), source);
    cout<<a<<endl;
    int n;
    cin>>n;
    return 0;
}


用strcpy_s就可以避免这些不可预料的行为。这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小.这样子这个字符复制函数就比strcpy安全些


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值