VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。
发布网友
发布时间:2022-06-09 11:59
我来回答
共5个回答
热心网友
时间:2023-09-27 15:18
首先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();
}
来自:求助得到的回答
热心网友
时间:2023-09-27 15:18
函数用错了。无论是strcpy还是strcpy_s,都是将后面一个字符串的内容复制到前面一个字符串中。你写的代码中,x是一个指针,指向一个字符串常量"王",x这里指向的是一个常量区域,如果你调用strcpy或者strcpy_s,将m拷贝到一个常量区域,这就错了。因为字面值常量的内存是不能修改的,这就是为何是常量的原因。要解决你的问题,你可以先给x分配一个空间x = new char[3];然后对x进行操作。记得在类的析构中释放分配的空间。
热心网友
时间:2023-09-27 15:19
不能x="王“这样赋值,只能这样初始化。也不能对char *x="abc"这样定义的指针x进行写操作,因为这样定义的字符串是常数。
热心网友
时间:2023-09-27 15:19
strcpy_s(x,m);
热心网友
时间:2023-09-27 15:20
貌似是你的形参不对吧。。。
VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。
函数吧src字符串复制到dest所指的数组中,这里潜在的要求是dest所指的不能是常量字符串,否则程序即使不报错,也会运行出错。函数返回值是指向dest的指针。这是因为常量字符串不能被修改。你的程序会运行错误。至于修改成strcpy_s,这只是增强了函数的安全,并不改变strcpy函数的要求。strcpy_s函数的原型是...
...VS2013运行的时候出现 error C2660: “strcpy_s”: 函数不接受 2...
while ((n < MAXLINES) && (gets_s(buffer) != 0) && (buffer[0]) != '\0'){if ((lines[n] = (char *)malloc(strlen(buffer)+1)) == NULL) //要多一个return -1; strcpy_s(lines[n++],strlen(buffer)+1, buffer); //第二个参数是数据最大长度} ...
为什么在vs2013中用c编程时不能用scanf_s函数输入字符串了
带“_s”后缀是为了让原版函数更安全:scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节,而scanf_s是visual studio中加入的完善版函数,可防止这类引用到不存在的元素的情况发生。而你的代码是在VS中编译的,找不到vS下的函数,所以用不了。
vs2013中VC问题,编译无错误,生成解决方案出现错误,无法解析的外部符号...
晕 你怎么学习c++的啊 你难道不知道电脑有窄字节和宽字节吗???你需要将窄字节转换为宽字节,或者是编辑编译器设置为窄字节。
vs中scanf怎么用不了
VS的SDL选项是编译器在源代码层次尽最大可能减少安全漏洞的数量和严重性,比如scanf这样的函数在目前看来就是不安全的,可能会溢出导致崩溃,打开这个选项,那么这类函数将视为错误,以前的版本默认是关闭SDL选项的,在学习阶段关闭SDL会少很多限制 在建立项目时把安全开发生命周期前面的对号去掉:已经建立...
VS201中warning C4047: "=":"FILE *"与"errno_t"的间接级别不同。怎么...
fopen_s调用错了 errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );返回值不是FILE 需要 fopen_s(&data_file, filename, "r");返回值是错误号。这个和fopen是不同的。
openmvG要怎么安装啊,有没有教程呀?
我用的VS2013不支持C++新特性:constexpr,所以建议你使用VS2015或更新版本,如果一定要用VS2013,可以这样做:在src/openMVG/cameras/Camera_Common.hpp文件中将有constexpr的地方直接去掉,或者改成模板函数也是可以的:运行样例,这里遇到一个坑:DenseStoraage.h line 86报错:R6010 Assertion failed,这是一个断言错误,在...
...main() { char a[10], b[10] = "copy"; strcpy_s(a,b);
这里面是因为strcpy_s需要输入3个参数,而你只输入了2个参数。所以会报错。解决的方案有2种:(1)添加宏命令 在文件中添加 define _CRT_SECURE_NO_WARNINGS这样就忽略了使用新函数而报错了。(2)添加strcpy_s函数的输入参数。对于字符串拷贝函数来说 errno_t strcpy_s( char *strDestination, ...
vs快速屏蔽的快捷键_VS修改快捷键
1、点击电脑左下角“开始”选项,电脑启动后,再点击∨S2013;2、进入电脑软件界面,点击“更改我的产品许可证”;3、输入产品密钥BWG7X_J98B3_W34RT_33B3R_JⅤYW9,然后再点“应用”;4、此时ⅤS2013就可以使用了。不同年份的ⅤS许可证过期解决办法,应该是大同小异的。8. vs调整代码格式快捷...
...编译能够通过,链接的时候就会出现如图错误,求高手指导解决!!!_百度...
这种情况只会出现在WIN7 X64的系统下,x32下没有Program Files (x86)的目录,不会有这样的问题。所以ADS的所有访问的路径,不能有文中或特殊符号。解决方法:你把ADS安装在C根目录下就可以。比如:C:\ARM\ADSv1_2。还有运行ADS时需要以管理员身份启动。参考:http://www.huomo.cn/os/article-199dd.html 本...