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

有什么理由使用非标准的 bzero()bcopy() 而不是 memset()在 Linux 环境中使用 memcpy()?我听到很多人说它们更适合 Linux 编译器,但没有看到比标准函数有任何优势。

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

最佳答案

虽然 bzerobcopy 函数不是 ISO C(我假设您在将它们称为非标准时所说的实际标准),但它们一个 POSIX 标准的东西,尽管它们早于 ISO POSIX。

并注意使用"is"这个词 - 这些函数在 POSIX.1-2001 中已弃用,并在 POSIX.1-2008 中最终删除,以尊重 memsetmemcpymemmove。所以你最好尽可能使用标准的 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))

关于c - bzero() & bcopy() 与 memset() & memcpy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330673/

相关文章:

linux - 除了使用 Ctrl + C 之外,如何在 linux 中停止正在运行的 R 命令?

linux - tr 命令 - 如何将字符串 "\n"替换为实际的换行符 (\n)

linux - qstat 和长作业名称

linux - cron 如何在内部安排作业?

c - 关于 putenv() 和 setenv() 的问题

c - 为什么在 Linux 中使用 select

python - 如何关闭被杀死的程序打开的套接字?

linux - 使用 Linux 加载程序时 ldconfig 错误 :"is not a symb

linux - 跨多台计算机管理用户配置文件

python - 带有隐藏窗口的跨平台子进程