char *p = new char[25];
strcpy_s(p,20,“wenmingjie”);才能成功运行,而strcpy_s(p,“wenmingjie”)不能。
同理:strname = (char *)new char[strlen(str) + 1];
strcpy_s(strname,strlen(str) + 1,str);也是正确的使用方法。
下面来自网络解释:
看名字明白,它和strcpy()函数的功能应该一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
#include “stdafx.h”
#include
#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)<<“strlen(str)”<<strlen(str)<<endl;
printf(str1);printf("\n");
cout<<str<<endl;
}
int _main(int argc, _TCHAR* argv[])
{
Test();
return 0;
}