web-dev-qa-db-ja.com

memset()の戻り値の使用は何ですか?

memset()は、関数に渡されたアドレスと常に同じ値であるvoid*を返すように宣言されています。

戻り値の用途は何ですか?なぜvoidを返さないのですか?

87
sharptooth

シグネチャは、他のすべての同様の関数と一致しています:memcpy()strcpy()など。式での呼び出し。

とはいえ、このような方法で戻り値を使用せざるを得ないような現実の状況に遭遇したことはありません。

33
NPE

次のような呼び出しの連鎖に使用できます。

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

関数をsprintfなどの別の関数の引数として使用するには

12
Noah

Googlingでmemsetが何を返すかを確認するときにこの質問に出くわしました。

1つの値をテストするコードがあります。そのコードが真の場合、値がゼロかどうかを確認します。

Cでゼロをテストするための完全に移植可能な方法はないため、中央でmemsetを実行する必要があります。

だから私のコードは:

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

これは、前の質問にリストされた連鎖の目的を示していますが、これはこの手法の使用例です。

これが良いコーディングであるかどうかは、他の人に任せます。

0
Gerard Nicol