bzero()&bcopy()与memset()&memcpy()

Ios*_*riu 36 c linux

没有任何理由使用非标bzero()bcopy()替代memset(),并memcpy()在Linux环境?我听说很多人说他们对Linux编译器更好,但是没有看到任何优于标准功能的优势.

它们是否比标准的更优化,或者它们是否具有任何行为特异性?

pax*_*blo 51

虽然bzerobcopy函数不是ISO C(我假设您在将它们称为非标准时所称的实际标准),但它们 POSIX标准的东西,尽管它们都预先标准化了ISO POSIX.

并注意用字的"人" -这些功能是在POSIX.1-2001弃用,fianally 除去在POSIX.1-2008,在尊重memset,memcpymemmove.所以你最好尽可能使用标准的C函数.

如果你有很多使用它们的代码,并且你不想去改变它们(虽然你可能应该在某些时候),你可以使用以下快速替换:

// void bzero(void *s, size_t n);
#define bzero(s, n) memset((s), 0, (n))

// void bcopy(const void *s1, void *s2, size_t n);
#define bcopy(s1, s2, n) memmove((s2), (s1), (n))
Run Code Online (Sandbox Code Playgroud)