strcpy_s strcat_s的用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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< }