2

私はデータにいくつかの内部計算値をコピーする必要がある関数を持っていgetData(void* data) ます、例えばint r = getRadius(); rはデータにコピーする必要があります、そしてそれを行う正しい方法は何ですか?試し*(int*)data = r; ましたが、これが最善の解決策かどうかはわかりません。

4

2 に答える 2

7

void ポインタが参照するメモリが int であることが確実な場合は、

*(int *)data = r;

ただし、より良い一般的な解決策は次のとおりです。

memcpy(data, &r, sizeof(int));

この方法では、バイト アラインメントやその他の潜在的な問題について心配する必要はありません。

于 2012-05-18T18:15:59.333 に答える
0

あなたが示すAPIを使用して、それを行う良い方法はないと思います。dbeer のソリューションは確かに機能しますが、API 自体に問題があります。

関数が半径 (整数) を返す場合、出力パラメーターは になりますint *
とはいえ、それほど単純ではないと思います。実際の関数は のようなものである可能性が高くgetData(int what, void *data)、 の値whatによってデータの型が決まります。
このような API は、コンパイラ (およびコードを読むときのユーザー) が適切に型をチェックできないため、適切ではありません。

ただし、この API に固執する場合は、少なくともサイズ パラメータを追加し、 に書き込む前に確認してくださいdata

于 2012-05-23T06:21:17.197 に答える