【发布时间】:2014-05-22 14:59:27
【问题描述】:
根据这个 Unix 文档http://pubs.opengroup.org/onlinepubs/009695399/functions/bzero.html
The memset() function is preferred over bzero().
For maximum portability, it is recommended to replace
the function call to bzero() as follows:
#define bzero(b,len) (memset((b), '\0', (len)), (void) 0)
但是void *memset(void *s, int c, size_t n); 第二个参数是 int 那么为什么他们推荐 '\0' 而不是 0? memset() 文档说“memset() 函数应将 c (转换为无符号字符) arg 复制到第一个 s 指向的对象的 strong>n 个字节。"这是更有效还是更明确?这里是否涉及最佳实践?
【问题讨论】:
-
在 C 中,
'\0'是一个int。但是,您使用哪个并不重要。 -
我没有答案,但我不得不说我也想知道这个。就我个人而言,我会尽量明确。 (我不知道转换
0->'\0'可能出现任何问题) -
@KasiyA
'\0'不是char。这是一个int。 -
'\0'和0都是同一个常量。使用是一种风格选择。如果memset()的目标是char *,IMO,'\0'传达更多含义。否则使用0。