邝(kuàng) 2021-09-07 22:58 采纳率: 100%
浏览 73
已结题

C++复制字符串strcpy函数使用时报错?

直接使用strcpy会报错,搜过相关文章后使用strcpy_s是可以的。
按照书上使用char* strcpy(目标数组名,源数组名)也不可以。
这是为什么呢


#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char str1[128] = "hello";
    char str2[128] = "bye";
    char temp[128];
    strcpy(temp, str1);
    strcpy(str1, str2);
    strcpy(str2, temp);
    cout << str1 << endl << str2;
    return 0;
}

已启动生成…
1>已启动生成: 项目: hello world, 配置: Debug x64
1>helloworld.cpp
1>D:\C++opencv_program\hello world\helloworld.cpp(10,2): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>D:\C++opencv_program\hello world\helloworld.cpp(11,2): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>D:\C++opencv_program\hello world\helloworld.cpp(12,2): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>已完成生成项目“hello world.vcxproj”的操作 - 失败。
生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-09-07 23:10
    关注

    编译器的安全性检查更严格了,而教材 的更新速度比较慢,所以按照书上写,有时候会出现一些错误。
    strcpy_s比strcpy函数多了一个参数,用来限定拷贝时最大的拷贝字节数,这样能够避免拷贝的字节数大于目的缓冲区的大小(否则会越界,导致内存混乱)。
    比如char buf[4];
    strcpy(buf,"abcdefg");因为buf只有4个字节大小的空间,在拷贝时,"abcdefg"的长度大于4,会导致内存出错。
    strcpy_s(buf,3,"abcdefg");这个可以限定只拷贝3个字节到buf中

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 创建了问题 9月7日

悬赏问题

  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!