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

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 python使用pulp线性优化时报错
  • ¥15 开源或低价数据中台哪个最好
  • ¥15 arduino编程出现字符串疑似覆盖现象
  • ¥15 我的b站在没有碰到屏幕的情况下偶尔会自动跳出进度条,就像在屏幕上点了一下一样,但我并没有点。而且视频进度并没有变。这可能是什么原因造成的?
  • ¥30 STK matlab python仿真
  • ¥15 关于IMageEnView 图标定位问题
  • ¥20 求解答(matlab)
  • ¥30 ffmpeg库使用过程中遇到的问题
  • ¥15 pyqt5 中python如何通过Qtwebchannel主动发消息给web前端
  • ¥15 关于HTML中title获取xml内容的问题