memset()
被声明为返回void*
,该值始终与传递到函数中的地址相同。
返回值的用途是什么? 为什么它不返回void
?
它可以用于调用链,例如:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
返回已复制内容的最后一个指针也更有意义。就像C++中的std::copy_n
和std::fill_n
一样,memset(my_strcpy(a, "bla"), 0, a + 200);
。 - alfC这个签名与所有其他类似的函数相一致:memcpy()
、strcpy()
等。我一直认为这是为了使人们能够链接对这些函数的调用,并以表达式的方式使用这些调用。
尽管如此,我从未遇到过真实世界中需要我以这种方式使用返回值的情况。
sprintf
函数。我在谷歌搜索memset返回值时遇到了这个问题。
我有一些代码,其中我测试一个值,然后如果为真,则测试一个值是否为零。
因为在C语言中没有完全可移植的方法来测试零,所以我必须在中间运行memset。
所以我的代码是:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
这涉及到前面问题中列出的链式用途,但这是使用此技术的示例。
我将让其他人评判这是否是良好的编码。
strcat()
的返回值有什么用?有时,标准函数不一定是该有的样子,而是它们被规定成了什么样子。 - DevSolar