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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 更新源metaspolit报错GPG Error「建议收藏」

    更新源metaspolit报错GPG Error「建议收藏」通过msfupdate无法更新到最新版本,需首先更新系统源:)更新系统源报错,提示metaspolitGPGerror:解决方案:输入以下两条命令1、sudoecho‘debhttp://apt.metasploit.com/lucidmain’>/etc/apt/sources.list.d/metasploit-framework.list2、sudowge…

    2022年10月9日
    2
  • 记录虚拟机桥接模式不能上网问题的解决方法「建议收藏」

    记录虚拟机桥接模式不能上网问题的解决方法「建议收藏」问题一:一直连接不上网络,右上角的网络模式显示连接不到sudovi/etc/network/interfaces初始情况下,只有以下两行autoloifaceloinetloopback在桥接模式下,需要添加以太网卡的启动,在下面添加两行autoens33ifaceens33inetdhcp看网卡的不同,填不同的,例如eth0,通过ifconfig查看本机网卡问题二:右上角显示连接上了,但是不能ping通外网开启主机的VMwareDHCP.

    2022年4月29日
    493
  • leetcode-5最长回文子串(manacher算法)

    leetcode-5最长回文子串(manacher算法)原题链接给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:”bab”解释:”aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:”bb”示例 3:输入:s = “a”输出:”a”示例 4:输入:s = “ac”输出:”a” 提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成题解暴力class Solution {public:

    2022年8月8日
    5
  • 情商的研究

    情商EQ认识与提高情商(情绪、意志、性格、行为习惯组成的商数)情商(EmotionalQuotient)通常是指情绪商数,简称EQ,主要是指人在情绪、意志、耐受挫折等方面的品质,其包括导商(LQ)等。总的来讲,人与人之间的情商并无明显的先天差别,更多与后天的培养息息相关。它是近年来心理学家们提出的与智商相对应的概念。从最简单的层次上下定义,提高情商是把不能控制情绪的部分变为可以…

    2022年4月9日
    35
  • ubuntu安装进入EFI Shell「建议收藏」

    ubuntu安装进入EFI Shell「建议收藏」背景:用VirtualBox安装Ubuntu14:第一次,无法进入LiveCD界面.第二次,勾选EFI界面后成功进入安装流程,成功安装。但是安装完成之后重启,进入了EFIShell界面,如下:解决方案:输入:fs:0cdEFI/ubuntugrubx64.efi引自ServerFault:IfyouaregettingtotheEFIshellyou

    2022年7月24日
    18
  • 第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

    第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

    2022年4月23日
    47

发表回复

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

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