vc为什么识别不出来 strcpy_s函数

作者&投稿:紫殷 (若有异议请与网页底部的电邮联系)
VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。~

首先x,m,xm都只是指针变量,x,m指向常量字符串"王"和"大宝"
其次,strcpy函数原型:
char *strcpy(char *dest, char *src);
函数吧src字符串复制到dest所指的数组中,这里潜在的要求是dest所指的不能是常量字符串,否则程序即使不报错,也会运行出错。函数返回值是指向dest的指针。
这是因为常量字符串不能被修改。
你的程序会运行错误。
至于修改成strcpy_s,这只是增强了函数的安全,并不改变strcpy函数的要求。
strcpy_s函数的原型是:
strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );第二个参数是strDestination字符串的大小,用意是控制复制的字符数,最多复制numberofelements个字符
#includeusing namespace std;class father{char *x, *m, *xm;public:father(){x = "王";m = "大宝";xm = new char[strlen(x)+strlen(m)+1];strcpy_s(xm,strlen(x)+strlen(m)+1,x);strcat_s(xm,strlen(x)+strlen(m)+1,m);}void print(){cout<<xm<<endl;}};void main(){father xx;xx.print();}

缺少头文件,#include using namespace std;,这样看行不行,不行定位到MSDN去看需要什么头文件吧

在VS2010中,有众多的系统函数名都追加了_s,比如scanf_s(),strcmp_s()等等,但在VC6.0中使用的还是传统的函数名,如果你希望早期的编译程序能识别新的函数原型,就像要求清朝的科学家能够上网冲浪一样不和情理。

楼上说的对。 _s表示这个方法是安全的 (safe),原来的函数对字符串的长是忽略的,可能溢出,这些加_s的方法对长度进行判断,如果目标字符装不下的话是不会进行不复制的。

因为你没有包含头文件#include <string.h>