[解決済み] ある構造体を別の構造体にコピーする
2022-02-15 18:18:27
質問
構造体をメンバーごとにコピーできることは知っていますが、その代わりに
memcpy
を構造体に適用できますか?
そうすることが望ましいのでしょうか?
私の構造体では、文字列もメンバーとして持っており、同じメンバーを持つ別の構造体にコピーする必要があります。どうすればいいのでしょうか?
どのように解決するのですか?
単純な代入によるコピーは、短く、読みやすく、抽象度が高いので、最適です。コードを読む人間に対して)「これらのビットをここからあそこにコピーしてください」と言い、読者にコピーのサイズ引数を考えさせる代わりに、単純な代入("この値をここからここにコピーする")をしているのです。サイズが正しいかどうか、迷うことはないのです。
また、構造体が大きくパディングされている場合、パディングをコピーする必要がない(パディングの位置がわかる)ので、代入によってコンパイラはより効率的なものを出力するかもしれませんが
mempcy()
そのため、コピーするように指示されたバイト数を常に正確にコピーします。
文字列が実際の配列である場合、すなわち。
struct {
char string[32];
size_t len;
} a, b;
strcpy(a.string, "hello");
a.len = strlen(a.string);
そうすると、やはりプレーンな代入が使えるようになります。
b = a;
完全なコピーを取得するため。しかし、このようにモデル化された可変長データでは、配列全体が常にコピーされるため、これは最も効率的なコピー方法ではありません。
ただし、ヒープで確保されたメモリへのポインタを含む構造体をコピーするのは、少し危険です。 エイリアス ポインタの所有者があいまいになってしまいます。
このような状況では、quot;deep copy"が本当に唯一の選択肢であり、これは関数で行う必要があります。
関連
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】警告:式の結果が未使用の場合
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Javaでオブジェクトをコピーするにはどうしたらいいですか?
-
[解決済み] JavaScriptで配列を複製する最速の方法 - スライス vs. 'for'ループ
-
[解決済み] C#でディレクトリの中身を丸ごとコピーする
-
[解決済み] dict.copy()を理解する - 浅いか深いか?
-
[解決済み] Cの構造体を別の構造体に割り当てる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】 strdup() - Cでは何をするのですか?