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

时间:2018-02-28 07:07:12

标签: c++ c++11

我在目标数组小于源数组的两个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();
}

打印;

  

Des

     

stdstr:Des

我正在使用Ubuntu上的g ++(5.4.0)进行编译。

1 个答案:

答案 0 :(得分:1)

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

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