Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';memset()返回值的用法是什么?_C++_C_Memset - Fatal编程技术网

C++ 什么';memset()返回值的用法是什么?

C++ 什么';memset()返回值的用法是什么?,c++,c,memset,C++,C,Memset,memset() 返回值有什么用?为什么它不返回void?它可以用于调用链接,如: char a[200]; strcpy(memset(a, 0, 200), "bla"); 该签名与所有其他类似函数一致:memcpy(),strcpy()等等。我一直认为这样做是为了能够链接对此类函数的调用,或者在表达式中使用此类调用 也就是说,我从来没有遇到过这样的现实情况:我会被迫以这种方式使用返回值。为了将该函数用作另一个函数的参数,例如sprintf,我在谷歌搜索memset返回的内容时遇到了这个问

memset()


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

它可以用于调用链接,如:

char a[200];
strcpy(memset(a, 0, 200), "bla");

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


也就是说,我从来没有遇到过这样的现实情况:我会被迫以这种方式使用返回值。

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

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

我有一些代码,我测试一个值,如果是真的,测试一个值是否为零

因为在C中没有完全可移植的方法来测试零点,所以我必须在中间运行MeMSET。< /P> 所以我的代码是:

if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
这说明了前面问题中列出的链接目的,但这是使用此技术的一个示例


我将让其他人来判断这是否是好的编码。

strcat()的返回值有什么用?有时,标准函数是指定的,而不是它们应该是的。@MatthieuM.:另外,返回东西通常有非零成本。即使返回值适合寄存器,通常也需要将该值加载到寄存器中。不管代价有多小,这都是有代价的。@sharptooth:kill all humans(杀死所有人)函数当然会返回被杀死的人数。@MatthieuM:你不会担心这些琐事,但我肯定会。如果我正在为资源有限的系统编写编译器呢?嗯?是的,这绝对是“链接”用例。我对答案投了赞成票,因为这是一个有趣的案例。但在现实生活中,我认为最好将memset和strcpy调用分开。C程序员喜欢不可读的代码,因此在设计标准函数时必须考虑无限链接。@ChadSchouggins阅读了一些haskell代码,你知道C程序员实际上相当一字不差;)(考虑regex“operator”=~)…当然,在本例中,如果
strcpy
返回的指针超过上次复制的指针,则更有意义<代码>内存集(我的strcpy(a,“bla”),0,a+200)(如C++中的
std::copy\n
std::fill\n
do)。