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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

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

Microsoft Visual C++ 2017 Redistributable 卸载不了怎么办?

删除完了还是没删成,用控制程序卸载也卸载不了,打开文件位置也删不了,不知道该怎么办,求指教!

需要用专业的卸载软件卸载,有很多程序是写到注册表里面的,直接在控制程序删除里没办法卸载干净,你可以用下面这个软件卸载,然后重启电脑就可以了。

参考技术A 用控制面板的程序卸载卸载不了说明注册表中的下载程序已经不在了
一般上,卸载到一半,但是由于特殊原因导致卸载未完成,可以手动找到安装目录删除文件
打开不了文件位置则说明已经删除了,把其关联的快捷方式之类的删除即可
参考技术B VC++的系列全套软件,是电脑必须安装的环境软件,很多程序都会调用的基础软件的。一般都是不卸载的。非要卸载的,开机按F8,进安全模式后,在卸载试下了。 参考技术C 可以用widnows自带的控制面板中找到对应的程序然后进行卸载,这样子会卸载的比较干净追问

控制面板一样也卸载不了。

参考技术D 这个程序是很多软件运行必备的基础,包括AMD和Nvidia的显卡驱动,AutoCAD等,它们的每个版本功能不是叠加的,每个版本都不能替代其它版本的作用,建议不要卸载,否则可能产生未知的问题

以上是关于VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。的主要内容,如果未能解决你的问题,请参考以下文章

UE4无法创建C++项目

strcpy&memcpy理解

Microsoft Visual C++ 2017 Redistributable 卸载不了怎么办?

C语言 显示strcpy出错 求大神解释 编译器是vs2013

vs2008 c++没有智能提示

vs2010调试c++总是说此项目已经过期怎么办