首先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
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<}
};
void main()
{
father xx;
xx.print();
}
函数用错了。无论是strcpy还是strcpy_s,都是将后面一个字符串的内容复制到前面一个字符串中。你写的代码中,x是一个指针,指向一个字符串常量"王",x这里指向的是一个常量区域,如果你调用strcpy或者strcpy_s,将m拷贝到一个常量区域,这就错了。因为字面值常量的内存是不能修改的,这就是为何是常量的原因。要解决你的问题,你可以先给x分配一个空间x = new char[3];然后对x进行操作。记得在类的析构中释放分配的空间。
不能x="王“这样赋值,只能这样初始化。也不能对char *x="abc"这样定义的指针x进行写操作,因为这样定义的字符串是常数。
strcpy_s(x,m);
貌似是你的形参不对吧。。。