邝(kuàng)
2021-09-07 22:58
采纳率: 87.5%
浏览 21

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 无用
    打赏 举报
  • 急速光粒 2021-09-07 23:03

    加上这个宏定义就好了 _CRT_SECURE_NO_WARNINGS。#define _CRT_SECURE_NO_WARNINGS

    评论
    解决 1 无用
    打赏 举报

相关推荐 更多相似问题