我在目标数组小于源数组的两个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)进行编译。
答案 0 :(得分:1)
怎么可能?它不知道。 strcpy()
没有检查长度的错误。它不能,因为你传递给strcpy()
的所有内容都是两个指针而根本没有长度信息。
strcpy()
只是从第一个元素的地址开始,将每个元素的字节复制到字节,并在复制零时停止。