mdsk.net
当前位置:首页 >> VS2013 C++中的strCpy用不了,说换成strCpy_s,还... >>

VS2013 C++中的strCpy用不了,说换成strCpy_s,还...

函数用错了.无论是strcpy还是strcpy_s,都是将后面一个字符串的内容复制到前面一个字符串中.你写的代码中,x是一个指针,指向一个字符串常量"王",x这里指向的是一个常量区域,如果你调用strcpy或者strcpy_s,将m拷贝到一个常量区域,这就错了.因为字面值常量的内存是不能修改的,这就是为何是常量的原因.要解决你的问题,你可以先给x分配一个空间x = new char[3];然后对x进行操作.记得在类的析构中释放分配的空间.

char数组能定义成长度为零吗 至少为1把 想存放字符串至少为2吧

是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替,如果你想继续使用strcpy的,main前面加上#pragma warning(disable:4996)即可

strcpy_s 函式是 strcpy 的安全版本,属于 ISO/IEC TR 24731 的标准, 某些 C 函式库支援这个函式,包含 Microsoft C Runtime Library(微软 C 语言执行时期函式库).它与 strcpy 的不同在于,在它取得额外参数来决定目的缓冲区大小时,会因

strcpy_s()有三个参数! 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); //第二个参数是数据最大长度 }

因为你没有包含头文件#include 再看看别人怎么说的.

strcpy_s是strcpy的安全版本防止越界使用的,VS2013这个机制还是做得很好的,当然学生为了应付作业or考试什么的还是有某渣渣6.0吧,不过这样学下去有毒就是了.

那是因为它不安全,换成strcpy_s

strcat_s和strcpy_s的第二个参数都是说明第一个字符串所容纳的字符个数,所以 我理解的strcat_s第二个参数应该是csName可以容纳的长度,如果_T("456")改成一个长度大于17的值,那么上面这句话不就溢出了么?是大于等于17都会溢出(

因为vc6.0是老版本的,<cstring>文件中使用的还是strcpy函数,还没有更新到strcpy_s!你可改为strcpy试一下

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.mdsk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com