关于vs strcpy_s()和strcat_s()用法探究

在vs 2019版本中 如果使用 strcpy()与strcat() 都会警告

大意说这个 strcpy()因为空间分配的 这个函数不安全 不建议用这个函数,strcat()也是这样。当然错误c4996完全可以通过代码 让它不提示,但是它确实不安全 不如学习一下新函数的用法。

strcpy_s()

老的 strcpy(D,S)就是把S数组复制给D,返回D。 但是S的空间比D大的话 这就会发生错误。

这就是这个函数的机理strcpy_s()具体

errno_t strcpy_s
( char *strDestination, size_t numberOfElements, const char *strSource );

简单说strcpy_s(D,sizeof(S)+1,S) 把S复制给D 把S的大小也给D 返回D.

strcat_s

老的机理strcat()

新的用法

strcat_s(A,sizeof(A)+sizeof(B)+1,B) 很好理解 空间一定是两个数组之和 再加一。

ps:下面给大家介绍下strcpy_s 和 strcat_s的用法

strcpy_s是系统的安全函数,微软在2005后建议用一系统所谓安全的函数,这中间就有strcpy_s取代了strcpy,原来strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。所以用strcpy_s代替,下面有一个使用strcpy_s的例子:

char source[] = "Hello world !";
char destination[20] = {0};
strcpy_s(destination,sizeof(destination)/sizeof(destination[0]),source);

strcpy_s是以字节为单位的参数,它用来确认缓冲区大小。这允许strcpy_s函数可以进行运行时检查,以确定写入的字符没有超过目标缓冲区的边界。所以它比strcpy好用,我还知道其他系统安全函数是在本来函数的后面加上“_s”,还有个遗憾就是用visual c++6.0没法编译strcpy_s函数,可能是因为他太新吧

原型声明:extern char *strcpy(char *dest,char *src);  

头文件:string.h 

功能:把src所指由NUL结束的字符串复制到dest所指的数组中。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。  

返回指向dest的指针。

strcat_s脱胎于strcat,用于两个字符串的链接,strcat(str1,str2)直接返回新的str1.但在vs2005后,为了安全起见,重新添加了些功能和api和以前不同。比如strcat_s.为什么是安全起见呢?对于老的你添加str2的时候如果st1溢出怎么办?很明显这就是需要改进的地方。所以新的strcat_s规定,有三个参数,必须指定str1的大小。所以应该这么来

 char string[20]="123";
 strcat_s(string,sizeof(string),"456");
 printf("%s",string);这样20个元素,足够装下123456了。

原型  extern char *strcat(char *dest,char *src);用法  #include <string.h>  

在C++中,则存在于<cstring>头文件中。

功能  把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

说明  src和dest所指内存区域不可以重叠且dest必须有足

够的空间来容纳src的字符串。   

返回指向dest的指针。

总结

到此这篇关于关于vs strcpy_s()strcat_s()用法的文章就介绍到这了,更多相关vs strcpy_s()strcat_s()用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解c语言中的 strcpy和strncpy字符串函数使用

    strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,char const *src)            必须保证dst字符的空间足以保存src字符,否则多余的字符仍然被复制,覆盖原先存储在数组后面的内存空间的数值,strcpy无法判断这个问题因为他无法判断字符数组的长度. #include <stdio.h> #include<string.h> int main() { char message

  • C语言中字符串常用函数strcat与strcpy的用法介绍

    strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include <string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串.返回指向dest的指针.函数实现: 复制代码 代码如下: /********************** * C语言标准库函数strcpy的一种典型的工业级的

  • 浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    实例如下: //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, const char *strSrc) { char *res=strDest; assert((strDest!=NULL)&&(strSrc!=NULL)); while(*strDest)strDest++; while(*strDest=*strSrc) { strDest++; strSrc

  • 关于vs strcpy_s()和strcat_s()用法探究

    在vs 2019版本中 如果使用 strcpy()与strcat() 都会警告 大意说这个 strcpy()因为空间分配的 这个函数不安全 不建议用这个函数,strcat()也是这样.当然错误c4996完全可以通过代码 让它不提示,但是它确实不安全 不如学习一下新函数的用法. strcpy_s() 老的 strcpy(D,S)就是把S数组复制给D,返回D. 但是S的空间比D大的话 这就会发生错误. 这就是这个函数的机理strcpy_s()具体 errno_t strcpy_s ( char *s

  • php中in_array函数用法探究

    本文较为深入的探究了php中in_array函数用法.分享给大家供大家参考.具体如下: 今天突然想到php中的in_array函数有个其怪的用法,下面我们来看看这个用法,有需要的朋友简单的参考一下,代码如下: 复制代码 代码如下: $a=array("1,2,3","4"); if(in_array(1,$a)){     echo "条件成立"; } 这个条件果然是成立的,按照我的思考逻辑上边的那个条件只有在参数1的值为"1,2,3&

  • 深入浅析OpenCV copyTo()函数

    目录 copyTo() 函数原型 简单示例 mask参数深入探究 copyTo() 函数原型 copyTo这个函数有两种定义方式,分别是: void copyTo( OutputArray m ) const; void copyTo( OutputArray m, InputArray mask ) const; 参数: 一个参数:一张输出图像 两个参数:一张输出图像和一个掩码图 简单示例 例如: image_in.copyTo(image_out); 就是把image_in这张图复制(cop

  • 深入探究angular2 UI组件之primeNG用法

    前言:众所周知,primeNG是ng2的一个ui组件库,很强大,个人感觉比ng2-bootstrap还强大,下面就告诉大家怎么安装使用,官网:http://www.primefaces.org/primeng/#/ 本人使用angular cli 创建项目,所以讲述在cli下的配置安装步骤,如果没有使用cli也不用担心,官网有具体的安装步骤. 1. 安装 cd 你的项目目录 npm install primeng --save-dev 2. 配置angular-cli.json omega是一种

  • 深度探究C++中的函数重载的用法

    C++ 允许同一范围内具有相同名称的多个函数的规范.这些函数称为重载函数,"重载"中对其进行了详细介绍.利用重载函数,程序员可以根据参数的类型和数量为函数提供不同的语义. 例如,采用字符串(或 char *)参数的 print 函数执行的任务与采用"双精度"类型的参数的函数执行的任务截然不同.重载允许通用命名并使程序员无需创建名称,例如 print_sz 或 print_d.下表显示了 C++ 使用函数声明的哪些部分来区分同一范围内具有相同名称的函数组. 重载注意事

  • js中call与apply的用法小结

    前天去面试,有个gg问了一些js知识,其中有一道call与apply用法的题目,尽管在365天前用过call方法,但当时还是没能答上来,今天深入总结一下 call和apply,它们的作用都是将函数绑定到另外一个对象上去运行 两者的格式和参数定义: call( thisArg [,arg1,arg2,- ] );       // 参数列表,arg1,arg2,...apply(thisArg [,argArray] );                 // 参数数组,argArray 上面两个

  • 详解C++编程中向函数传递引用参数的用法

    引用类型的函数参数 向函数传递引用而非大型对象的效率通常更高. 这使编译器能够在保持已用于访问对象的语法的同时传递对象的地址. 请考虑以下使用了 Date 结构的示例: // reference_type_function_arguments.cpp struct Date { short DayOfWeek; short Month; short Day; short Year; }; // Create a Julian date of the form DDDYYYY // from a

  • AngularJS指令用法详解

    本文实例讲述了AngularJS指令用法.分享给大家供大家参考,具体如下: 指令(directives)是任何AngularJS应用中最重要的成分.尽管AngularJS已经自带了很多指令,你经常会发现需要自己亲手创建一些特别的指令.本文将会带你了解自定义指令并解释如何在现实世界中的Angular项目中使用它们.文章的最后,我们将一起用Angular指令来创建一个简单的笔记小应用. 综述 一个指令就是一个引入新语法的东西.指令是在DOM元素上做的标记,并同时附加了一些特定的行为.例如,静态的HT

  • 深入理解ES7的async/await的用法

    在最开始学习ES6的Promise时,曾写过一篇博文 <promise和co搭配生成器函数方式解决js代码异步流程的比较> ,文章中对比了使用Promise和co模块搭配生成器函数解决js异步的异同. 在文章末尾,提到了ES7的async和await,只是当时只是简单的提了一下,并未做深入探讨. 在前两个月发布的Nodejs V7中,已添加了对async和await的支持,今天就来对这个东东做一下深入的探究.以更加优雅的方法写异步代码. async/await是什么 async/await可以

  • jQuery密码强度检测插件passwordStrength用法实例分析

    本文实例讲述了jQuery密码强度检测插件passwordStrength用法.分享给大家供大家参考,具体如下: 这里赋予密码强度为10个等级(实例中的progressImg1.png是一张包含十个状态的图片),然后通过设置每 个状态的CSS样式来直观地显示当前密码的强度.其中,实现此功能的重点和难点就是通过正则进行判断等级,有兴趣的朋友可以慢慢探究. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-passwordStrength

随机推荐