90

memset()声明返回void*的值始终与传递给函数的地址相同。

返回值有什么用?为什么不返回void

4

4 回答 4

123

它可用于调用链,如:

char a[200];
strcpy(memset(a, 0, 200), "bla");
于 2012-12-05T09:56:56.560 回答
36

签名与所有其他类似的函数一致:memcpy()strcpy()。我一直认为这样做是为了使人们能够链接对此类函数的调用,并以其他方式在表达式中使用此类调用。

也就是说,我从来没有遇到过我不得不以这种方式使用返回值的真实情况。

于 2012-12-05T09:57:37.867 回答
12

为了将该函数用作另一个函数的参数,例如sprintf

于 2012-12-05T20:27:11.967 回答
1

当我在谷歌上搜索 memset 返回的内容时,我遇到了这个问题。

我有一些代码在其中测试一个值,然后如果这是真的测试以查看一个值是否为零。

因为在 C 语言中没有完全可移植的方法来测试零,所以我必须在中间运行 memset。

所以我的代码是:

if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )

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

我会把它留给其他人来判断这是否是好的编码。

于 2013-05-20T03:29:25.973 回答