为什么即使目标阵列很小,strcpy也不会抛出错误? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么即使目标阵列很小,strcpy也不会抛出错误? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我在目标数组小于源数组的两个char数组上使用strcpy。但strcpy似乎并不关心。实际上,它将源数组无耻地复制到目标数组,我甚至可以管理新的目标数组。

#include <iostream>
#include <cstring>
int main(){
    char src_str[10] = {'D','e','s'};

    char dst_str[2] = {'S', 'r'};

    strcpy(dst_str, src_str); 
    std::cout << dst_str << std::endl;
    std::string stdstr(dst_str);
    std::cout << "stdstr: " << stdstr << std::endl;

    std::cin.ignore();
}

它打印;

stdstr:Des

我在Ubuntu上用g ++(5.4.0)编译。

答案

怎么可能呢?它不知道。 strcpy()没有任何错误检查的长度。它不能,因为所有你传递给strcpy()的是两个指针,根本没有长度信息。

strcpy()只是从第一个元素的地址开始,将每个元素的字节复制到字节,并在复制零时停止。

以上是关于为什么即使目标阵列很小,strcpy也不会抛出错误? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

即使很难,OpenGL、SDL 和 GLSL 都不会抛出错误,没有绘制多边形

即使将其标记为已计算,计算列抛出也无法更新错误

即使商店中的函数执行良好,Vuex 测试也会抛出错误

即使堆空间大于文档大小,Java 堆空间错误也会抛出“在转换 550 mb 文档时”

为啥即使实现了所有必需的方法,Class 也不会确认协议“WCSessionDelegate”错误

为啥即使实现了所有必需的方法,Class 也不会确认协议“WCSessionDelegate”错误