strcpy_s与strcpy的比較

strcpy_s与strcpy的比較

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

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

 

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

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

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

(0)
上一篇 2021年12月15日 下午10:00
下一篇 2021年12月15日 下午11:00


相关推荐

  • Pytest(13)命令行参数–tb的使用「建议收藏」

    Pytest(13)命令行参数–tb的使用「建议收藏」前言pytest使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败。–tb=style参数可以设置报错的时候回溯打印内容,可以设置参

    2022年7月28日
    8
  • pycharm 自动提示_pycharm智能提示

    pycharm 自动提示_pycharm智能提示打开提示功能方法:file—-&gt;powersavemode,去掉√。

    2022年8月25日
    12
  • JQuery.validationEngine表单验证插件

    JQuery.validationEngine表单验证插件一、说明JQuery.validationEngine表单验证控件功能强大,自带了样式显示模式:1.字符类型:非空验证、最大长度、最小长度、相等判断、数字和空格、数字和英文字母2.数字类型:数字、整数、最大值、最小值3.日期类型:日期(yyyy-MM-dd/yyyy/MM/dd等)、日期+时间、最小日期、最大日期、日期时间段4.业务字段:url、email、phone、ipv

    2022年10月3日
    3
  • C++面试题(四)——智能指针的原理和实现

    C++面试题(四)——智能指针的原理和实现普通 C 面试时候的一般都是这个套路 1 C 和 C 相比最大的特点 面向对象 封装 继承 多态 2 你知道虚函数吗 实现多态所必须 父类类型的指针指向子类的实例 执行的时候会执行之类中定义的函数 3 析构函数可以是虚函数吗 如果有子类的话 析构函数必须是虚函数 否则析构子类类型的指针时 析构函数有可能不会被调用到 4 多态的实现

    2026年3月19日
    3
  • 使用VS GDB扩充套件在VS上远端侦错Linux上的C/C++程序

    在Linux上开发C/C++程序,或许你会直接(本机或远端)登入Linux,打开编辑器写完代码后,就用gcc/g++来编译,遇到要除错(debug)的时候,则会选择使用gdb来进行除

    2021年12月21日
    148
  • layoutparams方法_layoutstretch

    layoutparams方法_layoutstretchLayoutParams是什么?LayoutParams主要保存了一个View的布局参数,因此可以使用LayoutParams来改变布局参数从而达到View位置的效果,一般在自定义View的时候使用。LayoutParams怎么用?如果父控件是LinearLayout,需要使用LinearLayout.LayoutParams代码如下:LinearLayout.La…

    2026年2月12日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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