邝(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日

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格