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