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

标签 c linux

有什么理由使用非标准的 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/

相关文章:

c - *(q + i * col + j)在此C程序中如何工作?

linux - $VARIABLE 和 ${VARIABLE} 有什么区别

javascript 设置超时();不适用于 linux (firefox)

python - anaconda3/bin/python : undefined symbol: archive_errno

c - while(!volatile); 是做什么的?做?

c - AltiVec 中的 mm_storel_epi64 等效吗?

c - 插入哈希表

c - 使用灵活的数组成员分配结构

linux - 命令查找文件中有多少个不同的名称

linux - 如何在 Linux 终端中创建电子邮件帐户/地址?