博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
strcpy_s与strcpy的比较
阅读量:5864 次
发布时间:2019-06-19

本文共 1239 字,大约阅读时间需要 4 分钟。

strcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。

这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。
三个参数时:
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
两个参数时:
errno_t strcpy_s(
char (&strDestination)[size],
const char *strSource
); // C++ only
例子:

#include<iostream>
#include<cstring>
using namespace std;
 
void Test(void)
{
char *str1=NULL;
str1=new char[20];
char str[7];
strcpy_s(str1,20,"hello world");//三个参数
strcpy_s(str,"hello");//两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数
cout<<"strlen(str1):"<<strlen(str1)<<endl<<"strlen(str):"<<strlen(str)<<endl;
printf(str1);
printf("\n");
cout<<str<<endl;
}
 
int main()
{
Test();
return 0;
}
#include<iostream>
#include<string.h>
using namespace std;
 
void Test(void)
{
char *str1=NULL;
str1=new char[20];
char str[7];
strcpy_s(str1,20,"hello world");//三个参数
strcpy_s(str,"hello");//两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数
cout<<"strlen(str1):"<<strlen(str1)<<endl<<"strlen(str):"<<strlen(str)<<endl;
printf(str1);
printf("\n");
cout<<str<<endl;
}
 
int main()
{
Test();
return 0;
}

输出为:
strlen(str1): 11        //另外要注意:strlen(str1)是计算字符串的长度,不包括字符串末尾的“\0”!!!
strlen(str): 5
hello world
hello

转载地址:http://mpynx.baihongyu.com/

你可能感兴趣的文章
访问网站出现图片破裂
查看>>
Exchange Server因磁盘扇区格式不一致导致数据库复制错误
查看>>
【Unity3d】【项目学习心得】从资源服务器下载资源(三)
查看>>
ESB 12种简单的跑法
查看>>
Juqery Ajax 传递数组
查看>>
《Java编程思想》第四版读书笔记 第十章 内部类
查看>>
我的友情链接
查看>>
注释转换
查看>>
模拟实现英汉字典(使用key/value形式的哈希表)
查看>>
DeFi终极指南【以太坊区块链去中心化金融】
查看>>
awk扩展
查看>>
安卓打电话发短信代码
查看>>
centos 6.9安装桌面环境
查看>>
【C语言】冒泡排序法
查看>>
[非凡程序员]文件管理
查看>>
selector之无上坑爹
查看>>
Android - ToDoList(定制样式) 详解
查看>>
科普 | 从大数据到Hadoop,Spark,Storm
查看>>
滑动门效果
查看>>
python module使用
查看>>