strcpy_s和strcpy()函数

转载 2015年11月18日 14:09:38
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

Windbg无法捕获strcpy_s crash时的函数调用栈的研究

问题描述 在一年前,发现产品的windows service总是崩溃,但每次用windbg attach或者adplus产生dump,总是不能捕获到程序出错时候的栈,而且crash的时候只能看到少数...

C++安全函数之strcpy_s

 C++安全函数之strcpy_s 编辑 删除 C++安全函数之strcpy_s 1.  必须包含的头文件: 2.  函数声明: [cpp] ...

C/C++种字符串的安全操作方式strcpy_s等字符串处理函数

C/C++种字符串的安全操作方式strcpy_s等字符串处理函数 这个错误可能比较隐蔽,虽然这个函数有说明。这个是我犯过的错,希望自己以后能够勉励,同时供大家参考免戒。 http://blog.sin...

strcpy()、strncpy()、strlcpy()、strncpy_s()函数

strncpy()函数 原型:extern char *strncpy(char *dest, char *src, int n);     用法:#include      功能:把src所指...
  • myth_HG
  • myth_HG
  • 2015年08月03日 17:35
  • 485

编写 strcpy函数

  • 2014年08月28日 10:50
  • 379B
  • 下载

CRT函数相关问题,gets_s和strcpy_s的用法

先说些题外话。       C和C++被我遗忘在角落许久,最近想转行做程序员的念头剧增,于是开始了系统的复习。       只学过C++,C在学校没学过,只是兴起时翻了翻一些书本。不过听说C是基础...
  • AOBO516
  • AOBO516
  • 2015年04月06日 18:20
  • 736

对于VS中一些较严谨的(_s)函数如strcpy_s的第二个参数的问题

在学习中发现strcpy_s中第二个参数不能随便写。开始我碰到这个比较严谨的函数时我故作聪明,将第二个参数使用strlen()代替。但拿不严谨的小聪明去解决严谨的函数问题必然问题一大堆。 今天这一个...

strcpy函数

  • 2013年04月27日 01:23
  • 631B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:strcpy_s和strcpy()函数
举报原因:
原因补充:

(最多只允许输入30个字)