为什么memcpy_在违反运行时约束的情况下会归零?

为什么memcpy_在违反运行时约束的情况下会归零?,c,memory,C,Memory,在此()中,当发生运行时约束冲突时,dest指向的区域被归零 有人能解释为什么要这样做吗?几天前我被这件事缠住了手脚,我想知道为什么会这样做。此行为记录在的第K.3.7.1.1节以及 这样做的原因很可能是在故障情况下具有确定性行为,这样您就不会得到包含未初始化值的dest。这允许更健壮的可测试性。因为这是唯一安全的方法。这就是它比strncpy和memcpy等更安全的原因。“新的”“安全”复制方法的要点是,即使正确地以null结尾,部分缓冲区内容也是一件坏事。您是否在问,为什么在a)源指针为nu

在此()中,当发生运行时约束冲突时,
dest
指向的区域被归零


有人能解释为什么要这样做吗?几天前我被这件事缠住了手脚,我想知道为什么会这样做。

此行为记录在的第K.3.7.1.1节以及


这样做的原因很可能是在故障情况下具有确定性行为,这样您就不会得到包含未初始化值的
dest
。这允许更健壮的可测试性。

因为这是唯一安全的方法。这就是它比strncpy和memcpy等更安全的原因。“新的”“安全”复制方法的要点是,即使正确地以null结尾,部分缓冲区内容也是一件坏事。您是否在问,为什么在a)源指针为
null
或b)提供的缓冲区太小时,实现会填充缓冲区?也许是为了产生一个可重复的结果。@请注意,
strncpy
根本不是
strcpy
的更安全版本。