VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。
5个回答
展开全部
首先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();
}
来自:求助得到的回答
展开全部
函数用错了。无论是strcpy还是strcpy_s,都是将后面一个字符串的内容复制到前面一个字符串中。你写的代码中,x是一个指针,指向一个字符串常量"王",x这里指向的是一个常量区域,如果你调用strcpy或者strcpy_s,将m拷贝到一个常量区域,这就错了。因为字面值常量的内存是不能修改的,这就是为何是常量的原因。要解决你的问题,你可以先给x分配一个空间x = new char[3];然后对x进行操作。记得在类的析构中释放分配的空间。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不能x="王“这样赋值,只能这样初始化。也不能对char *x="abc"这样定义的指针x进行写操作,因为这样定义的字符串是常数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strcpy_s(x,m);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-05-16 · 知道合伙人软件行家
babytaomail
知道合伙人软件行家
向TA提问 私信TA
知道合伙人软件行家
采纳数:429
获赞数:1130
某公司嵌入式开发工程师; 熟悉VC++/C/MFC,Linux驱动,STM32,FPGA,Allegro/Pads及硬件电路设计
向TA提问 私信TA
关注
展开全部
貌似是你的形参不对吧。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询