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<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)<<"strlen(str)"<<strlen(str)<<endl; printf(str1);printf("\n"); cout<<str<<endl; } int _main(int argc, _TCHAR* argv[]) { Test(); return 0; } |
strcpy_s不接受两个参数的问题
最新推荐文章于 2024-02-08 11:19:51 发布