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

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 cplex运行后参数报错是为什么
  • ¥15 之前不小心删了pycharm的文件,后面重新安装之后软件打不开了
  • ¥15 vue3获取动态宽度,刷新后动态宽度值为0
  • ¥15 升腾威讯云桌面V2.0.0摄像头问题
  • ¥15 关于Python的会计设计
  • ¥15 聚类分析 设计k-均值算法分类器,对一组二维模式向量进行分类。
  • ¥15 stm32c8t6工程,使用hal库
  • ¥15 找能接spark如图片的,可议价
  • ¥15 关于#单片机#的问题,请各位专家解答!
  • ¥15 博通raid 的写入速度很高也很低