证明strcpy
在某些平台上重叠的源地址和目标地址失败并不难,要么产生不正确的结果,要么陷入陷阱(后者在 Linux/amd64 上具有一些负随机偏移)。
我已经strcpy
为我们的代码库配备了一个包装函数,其中包含一个调试构建断言,用于检查此类重叠副本,并已收到许多内部开发请求以削弱此断言检查,以便它只会引发非零重叠的中止。
根据我对strcpy 文档的阅读,我一直犹豫是否这样做,因为我认为相同的源和目标将被视为重叠。在 C++ 标准(或 C)中明确定义了重叠,这是否也包括相等性?
我怀疑许多供应商strcpy
的实现是特殊情况,尽管标准允许这种行为是未定义的行为。是否有任何平台/硬件组合已知这样的相同副本会失败?