What's the use of memset() return value?

C++CMemset

C++ Problem Overview


memset() is declared to return void* that is always the same value as the address passed into the function.

What's the use of the return value? Why does it not return void?

C++ Solutions


Solution 1 - C++

It may be used for call chaining like:

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

Solution 2 - C++

The signature is in line with all the other similar functions: memcpy(), strcpy() etc. I always thought this was done to enable one to chain calls to such functions, and to otherwise use such calls in expressions.

That said, I've never come across a real-world situation where I would feel compelled to use the return value in such a manner.

Solution 3 - C++

In order to use the function as an argument for another function such as sprintf

Solution 4 - C++

I came across this question when Googling to see what memset returned.

I have some code where I test for one value, then if that is true test to see if a value is zeros.

Because there is no completely portable way in C to test for zeros I have to run memset in the middle.

So my code is:

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

This speaks to the chaining purpose listed in the previous questions, but it is an example of a use for this technique.

I'll leave it to others to judge if this is good coding or not.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsharptoothView Question on Stackoverflow
Solution 1 - C++Juraj BlahoView Answer on Stackoverflow
Solution 2 - C++NPEView Answer on Stackoverflow
Solution 3 - C++NoahView Answer on Stackoverflow
Solution 4 - C++Gerard NicolView Answer on Stackoverflow