strcpy_s与strcpy的比較

strcpy_s与strcpy的比較

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

strcpy_s与strcpy的比較此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117950.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java 常量池和运行时常量池_常量池在jvm的哪个部分

    java 常量池和运行时常量池_常量池在jvm的哪个部分前言一直在《深入理解JVM》对常量池只有一个浅薄的了解,之前也遇到过这种题目,今天还是要挑出来进行一次全方位的了解。常量池分类常量池大体可以分为:静态常量池,运行时常量池。静态常量池存在于class文件中,比如经常使用的javap-verbose中,常量池总是在最前面把?运行时常量池呢,就是在class文件被加载进了内存之后,常量池保存在了方法区中,通常说的常量池值的…

  • java框架中的controller层、dao层、domain层、service层、view层[通俗易懂]

    1.Controller层:接口层,用户访问请求时对接。Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以…

  • Ubuntu 21.04 lts_Ubuntu 21.10

    Ubuntu 21.04 lts_Ubuntu 21.10Ubuntu粉丝!是时候对下一个大版本Ubuntu22.04LTS感到兴奋了。是的。这是一个长期支持版本,将支持五年,直到2027年4月。即将发布的LTS版本带来了几个新功能。如果您使用的是Ubuntu20.04LTS,您会注意到许多视觉变化。如果您使用的是Ubuntu21.10,您已经看到了很多变化,但在即将发布的版本中仍然会有一些新变化。在我向您展示22.04中新的预期新功能之前,让我们看看它什么时候发布。Ubuntu22.04发布时间表Ubunt

  • Windows系统重装Linux系统

    Windows系统重装Linux系统PC机以前是Windows系统现在重装Linux系统材料:8G以上U盘(eveything版本很大,如果U盘容量不足请选择DVD版本ISO)UltralSOLinux系统(Centos7_64_eveything.iso)tips:准…

  • IDEA连接mysql8数据库的方法以及遇上时区乱码的情况

    IDEA连接mysql8数据库的方法以及遇上时区乱码的情况

  • java算法之身份证号码验证

    调用时直接new IDCard().verify(身份证id);就可以了实现代码如下:public class IDCard { private String _codeError; //wi =2(n-1)(mod 11) final int[] wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 1

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号