memset()
声明返回void*
的值始终与传递给函数的地址相同。
返回值有什么用?为什么不返回void
?
它可用于调用链,如:
char a[200];
strcpy(memset(a, 0, 200), "bla");
签名与所有其他类似的函数一致:memcpy()
等strcpy()
。我一直认为这样做是为了使人们能够链接对此类函数的调用,并以其他方式在表达式中使用此类调用。
也就是说,我从来没有遇到过我不得不以这种方式使用返回值的真实情况。
为了将该函数用作另一个函数的参数,例如sprintf
当我在谷歌上搜索 memset 返回的内容时,我遇到了这个问题。
我有一些代码在其中测试一个值,然后如果这是真的测试以查看一个值是否为零。
因为在 C 语言中没有完全可移植的方法来测试零,所以我必须在中间运行 memset。
所以我的代码是:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
这说明了前面问题中列出的链接目的,但它是使用此技术的一个示例。
我会把它留给其他人来判断这是否是好的编码。