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