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) ) 

这说明了前面问题中列出的链接目的,但是这是一种使用这种技术的例子。

我会留给别人去判断这是不是好的编码。