strcpy_s strcat_s的用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

strcpy_s、strcat_s的用法

1.前言

已经大约有10年没有写程序了,朋友要求我写一个小程序,就动手写了,用的IDE是visual studio 2012。

写的时候,遇到不少问题,最让我感觉好玩的就是这个strcpy_s和strcat_s 函数的问题,为了节省以后可能碰到这个问题的初学者的时间,把这个事情写下来。

程序写好后,经常报错:Expression: (L”Buffer is too small” && 0),报错图如下:

我在网上查了一些方法,总是解决不了问题,我最后跟踪了一下程序,又到visual studio的网站上看了一下,解决了问题。解决问题的方法如下。

2.用法

2.1.strcpy_s的定义

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

2.2.strcpy_s的参数含义

strDestination 目标字符串缓冲区的位置。

numberOfElements 目标字符串缓冲区的大小。

strSource Null 终止的源字符串缓冲区。

注意:第二个参数numberOfElements是目标字符缓冲区的大小,不是本次需要拷贝的字符的多少,我所犯错误就在这里了。strcat_s的参数,也是同样的含义,是要求给出整个目标字符缓冲区的大小,不是本次追加字符的大小。

2.3.strcpy_s的用法

正确用法示例:

void main()

{

char dest[30], source[10];

for(int i=0; i<9;i++)

{

source[i] ='a';

}

source[9]=0; //把最后置为0,标识字符串的结束。

strcpy_s(dest,30, source);

//请务必注意此处的第二个参数为目标缓冲区的大小,不可以写上源字符串的长度。

cout<

}

注意:strcpy_s执行完成后,目标缓冲区的多余空间(字符串结束以后的空间),编译器会进行填充,在我的环境下,我发现填充的是-2,请大家注意,不要影响了后续的数据。

2.4.strcat_s的定义

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

2.5.参数说明

strDestination Null 终止的目标字符串缓冲区。

numberOfElements 目标字符串缓冲区的大小。

strSource Null 终止的源字符串缓冲区。

注意:第二个参数numberOfElements是目标字符缓冲区的大小,不是本次需要追加的字符的多少,我所犯错误就在这里了。

2.6.strcat_s的用法

正确用法示例:

void main()

{

char dest[30], source1[10],source2[15];

for(int i=0; i<9;i++)

{

source[i] ='a'; }

source[9]=0; //把最后置为0,标识字符串的结束。

strcpy_s(dest,30, source1);

//请务必注意此处的第二个参数为目标缓冲区的大小,不可以写上源字符串的长度。

cout<

for(int i=0; i<15;i++)

{

source2[i] ='b'; }

source2[14]=0; //把最后置为0,标识字符串的结束。

strcat_s(dest,30,source2);

//请务必注意此处的第二个参数为目标缓冲区的大小,不可以写上源字符串的长度

Cout<

}

相关文档
最新文档