90

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

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

4

4 に答える 4

123

次のようなコールチェーンに使用できます。

char a[200];
strcpy(memset(a, 0, 200), "bla");
于 2012-12-05T09:56:56.560 に答える
36

署名は、他のすべての同様の関数と一致しています:memcpy()などstrcpy()。これは、そのような関数への呼び出しを連鎖させたり、式でそのような呼び出しを使用したりできるようにするために行われたと常に考えていました。

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

于 2012-12-05T09:57:37.867 に答える
12

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

于 2012-12-05T20:27:11.967 に答える
1

どの memset が返されたかをグーグルで確認したときに、この質問に出くわしました。

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

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

だから私のコードは次のとおりです。

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

これは、前の質問に挙げた連鎖の目的を物語っていますが、この手法の使用例です。

これが適切なコーディングであるかどうかの判断は、他の人に任せます。

于 2013-05-20T03:29:25.973 に答える