memset()
void*
関数に渡されたアドレスと常に同じ値を返すように宣言されています。
戻り値の用途は何ですか? 戻らないのはなぜvoid
ですか?
次のようなコールチェーンに使用できます。
char a[200];
strcpy(memset(a, 0, 200), "bla");
署名は、他のすべての同様の関数と一致しています:memcpy()
などstrcpy()
。これは、そのような関数への呼び出しを連鎖させたり、式でそのような呼び出しを使用したりできるようにするために行われたと常に考えていました。
そうは言っても、そのような方法で戻り値を使用せざるを得ないと感じる現実の状況に遭遇したことはありません。
関数を次のような別の関数の引数として使用するにはsprintf
どの memset が返されたかをグーグルで確認したときに、この質問に出くわしました。
1 つの値をテストするコードがあり、それが true の場合、値がゼロかどうかを確認します。
C にはゼロをテストするための完全に移植可能な方法がないため、途中で memset を実行する必要があります。
だから私のコードは次のとおりです。
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
これは、前の質問に挙げた連鎖の目的を物語っていますが、この手法の使用例です。
これが適切なコーディングであるかどうかの判断は、他の人に任せます。