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