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个字符

#include<iostream>
using 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();
}

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-16
函数用错了。无论是strcpy还是strcpy_s,都是将后面一个字符串的内容复制到前面一个字符串中。你写的代码中,x是一个指针,指向一个字符串常量"王",x这里指向的是一个常量区域,如果你调用strcpy或者strcpy_s,将m拷贝到一个常量区域,这就错了。因为字面值常量的内存是不能修改的,这就是为何是常量的原因。要解决你的问题,你可以先给x分配一个空间x = new char[3];然后对x进行操作。记得在类的析构中释放分配的空间。本回答被网友采纳
第2个回答  2014-05-16
不能x="王“这样赋值,只能这样初始化。也不能对char *x="abc"这样定义的指针x进行写操作,因为这样定义的字符串是常数。
第3个回答  2014-05-16
strcpy_s(x,m);
第4个回答  2014-05-16
貌似是你的形参不对吧。。。