为什么即使目标阵列很小,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 都不会抛出错误,没有绘制多边形
即使堆空间大于文档大小,Java 堆空间错误也会抛出“在转换 550 mb 文档时”