memset() 返回值有什么用?
What's the use of memset() return value?
memset()
被声明为返回void*
,该值始终与传递给函数的地址相同。
返回值有什么用?为什么不返回void
?
它可以用于调用链接,例如:
char a[200];
strcpy(memset(a, 0, 200), "bla");
签名与所有其他类似功能一致:memcpy()
、strcpy()
等。我一直认为这样做是为了能够将调用链接到此类函数,并在表达式中使用此类调用。
也就是说,我从未遇到过在现实世界中,我会觉得有必要以这种方式使用返回值。
为了将该函数用作另一个函数的参数,例如 sprintf
我在谷歌搜索时遇到了这个问题,看看 memset 返回了什么。
我有一些代码,我测试一个值,然后如果这是真的,测试以查看值是否为零。
因为 C 中没有完全可移植的方法来测试零,所以我必须在中间运行 memset。
所以我的代码是:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
这说明了前面问题中列出的链接目的,但它是使用该技术的示例。
我会把它留给其他人来判断这是否是好的编码。
相关文章:
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 使用 Google 基准测试时返回值会发生什么情况?
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- CUDA返回值错误35的含义是什么
- 什么 & 返回左值或右值?
- 是什么意思,返回值是一个类名,后跟一对空括号
- "警告:并非所有控制路径都返回值"是什么意思?(C++)
- 为循环中多次调用的函数返回值预分配内存的正确方法是什么
- 如果我不将其存储在任何地方,返回值会发生什么情况?
- C++ - 在线程中使用时,将函数的返回值声明为 void/void* 之间有什么区别吗?
- memset() 返回值有什么用?
- 从 boost::algorithm::join 返回值的范围是什么?
- 返回值和副作用编码之间有什么区别
- int main() 的返回值是什么意思,如何显示它?
- 在JNA中,GlobalAlloc和GlobalLock的返回值有什么不同
- 当函数返回值是指针,而返回类型是c++中的引用时会发生什么
- GTIFWriteKeys和GTIFKeySet libgeotiff函数(C++)的返回值表示什么
- rdstate() 返回值是什么意思
- 未分配返回未定义对象类型引用的 C++ 函数的返回值时会发生什么情况