memcpy_s返回错误404是什么意思

时间:2016-10-28 18:06:24

标签: c

当我使用memcpy_s()复制数据时,我得到的返回值为404.这是什么意思?我已检查目标缓冲区大小是否大于要复制的字节数。

1 个答案:

答案 0 :(得分:4)

memcpy_s()在C11标准(ISO/IEC 9899:2011)中正式定义,第K.3.7.1.1节,其中只是声明:

  

如果没有运行时约​​束违规,则memcpy_s函数返回零。否则,返回非零值。

没有提及memcpy_s()错误返回的具体值,因此它们是实现定义的。

您没有说明您实际使用的是哪种编译器。

例如,Microsoft的MSVC memcpy_s() documentation声明memcpy_s()只能在发生错误时返回EINVALERANGE,并且该行为未定义如果源和目的地重叠。

MinGW-w64 exhibits this same behavior

但是,ISO / IEC 9899:2011中的memcpy_s()定义正式禁止此行为:

  

不得在重叠的对象之间进行复制。

在某些运行时实现中,可能会返回另一个错误代码:

#define ESOVRLP         ( 404 )       /* overlap undefined           */

此错误表示源和目标重叠。

由于Microsoft在MSVC(和MinGW)中获取未定义的行为,因此您获得未记录的返回值,因此您可能正在使用一些其他编译器/运行时具有更多符合C11的实现,如果检测到重叠,则返回ESOVRLP(例如,safeclib does)。