在c++中strcpy()函数不安全,代替其strcpy_s()函数的用法(C4996 我是在Visual Studio2019中发现的错误,大家注意一下软件,我发现的错误解决方案是否是适合你的? 在c++strcpy()函数不能用,因 strcpy()函数运行不安全,并且具有更安全的函数代替。而代替strcpy()的函数是strcpy_s(),接下来介绍strcpy_s()具体用法。 首先要包含头文件<cstring>,strcpy_s()函数被包含在此头文件中,此函数不在std名字空间中,记得不要使用语句:using namespace std;。 接着来介绍该函数参数,该函数参数有两种形式,一种为三个参数的strcpy_s(char* a(把复制的内容复制到此指针), int b(复制长度), char const* c(被复制指针));一种为两个参数的strcpy_s(char* a(把复制的内容复制到此指针),char const* c(被复制指针),具体介绍如下 一、两个参数的 #include <iostream> #include <cstring> int main() { char p[10]; std::cin >> p; char p1[10]; strcpy_s(p1, p);//数组的数组名是一个常量指针 std::cout << “p1 = ” << p1 ; return 0; } 运行结果 123//输入的值 p1 = 123 二、三个参数的 #include <iostream> #include <cstring> int main() { char p[10]; std::cin >> p; char p1[10]; strcpy_s(p1, 10,p );//10的位置也可以换成strlen(p)+1 std::cout << “p1= ” << p1 ; return 0; } 运行结果 123//输入的值 p1= 123 注意 1 strlen(p)返回的值为字符串的长度,但是不包括字符串末尾的空字符,所以+1。 注意2 在运用两个参数的strcpy_s()是可能会出错,如 #include <iostream> #include <cstring> int main() { const char *p=””; char *p1=new char[10]; strcpy_s(p1, p); std::cout << “p1 = ” << p1; delete[]p1; return 0; } 运行出错: 1没有与参数列表匹配的 重载函数”strcpy_s”实例; 2.”strcpy_s”:函数不接受2个参数。 原因:不能保证缓冲区大小 解决方法 方法1、 #include <iostream> #include <cstring> int main() { const char *p=””; char p1[10];//将char *p1更改成 char p1[10] strcpy_s(p1, p); std::cout << “p1 = ” << p1; return 0; } 运行结果 p1= 方法2 #include <iostream> #include <cstring> int main() { const char* p = “”; char *p1=new char [10]; strcpy_s(p1,10, p);//使用三个参数的strcpy_s()函数 std::cout << “p1 = ” << p1; delete[] p1; return 0; } 运行结果 p1= 如有错误,请指出。 如有侵权,请联系删除。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/44760.html