VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。

 我来答
龍__鳳
推荐于2018-02-27 · TA获得超过2346个赞
知道小有建树答主
回答量:948
采纳率:0%
帮助的人:1397万
展开全部

首先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 · TA获得超过528个赞
知道小有建树答主
回答量:339
采纳率:100%
帮助的人:189万
展开全部
函数用错了。无论是strcpy还是strcpy_s,都是将后面一个字符串的内容复制到前面一个字符串中。你写的代码中,x是一个指针,指向一个字符串常量"王",x这里指向的是一个常量区域,如果你调用strcpy或者strcpy_s,将m拷贝到一个常量区域,这就错了。因为字面值常量的内存是不能修改的,这就是为何是常量的原因。要解决你的问题,你可以先给x分配一个空间x = new char[3];然后对x进行操作。记得在类的析构中释放分配的空间。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2014-05-16 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6524万
展开全部
不能x="王“这样赋值,只能这样初始化。也不能对char *x="abc"这样定义的指针x进行写操作,因为这样定义的字符串是常数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
感情程序员
2014-05-16 · TA获得超过1615个赞
知道小有建树答主
回答量:101
采纳率:0%
帮助的人:82.9万
展开全部
strcpy_s(x,m);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
babytaomail
2014-05-16 · 知道合伙人软件行家
babytaomail
知道合伙人软件行家
采纳数:429 获赞数:1130
某公司嵌入式开发工程师; 熟悉VC++/C/MFC,Linux驱动,STM32,FPGA,Allegro/Pads及硬件电路设计

向TA提问 私信TA
展开全部
貌似是你的形参不对吧。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式