• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語 構造体)

C言語・構造体についての初歩的な質問

このQ&Aのポイント
  • C言語で構造体について疑問があります。ポインタの理解もまだできていません。
  • Windows7とVisual Studio 2010を使用して、WinAPIの勉強中にプログラムを作成しています。
  • 構造体Aのメンバnameに別の変数Bufの内容をコピーしたいのですが、ポインタの問題でうまくいきません。解決方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

if(data->name!=NULL)free(data->name); data->name=calloc(data->name, strlen(Buf) + 1, sizeof(char)); strcpy(data->name, Buf); ところで、data自体のmallocはやってますよね?

KabosuOrange
質問者

お礼

回答ありがとうございました。 構造体自体のmallocはしています。 コピーする前に領域を確保しなくてはいけなかったのですね。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

calloc じゃなくて malloc で十分だと思うし, その前の free も「NULL かどうかの判定」は不要だと思うの>#1.

KabosuOrange
質問者

お礼

ありがとうございました。 最小限のプログラムで無駄なく書けるようになりたいです。

KabosuOrange
質問者

補足

自分のプログラムではmallocで大丈夫でした。

  • yhc3594
  • ベストアンサー率27% (25/92)
回答No.3

原因はきちんと整理できています。 ポインター変数を使うときはいろいろと注意が必要ですが、今回の場合は 単純に構造体を実態として定義すれば事足りると思います。 struct A{ fixed char name[128]; double i; } ご参考まで

KabosuOrange
質問者

お礼

回答ありがとうございました。 何とか目的のことはできました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> 初歩の質問ですがお手柔らかに… > ポインタもまだ理解しきれていません。 それなら、まずポインタ(および、動的なメモリの確保と解放)の勉強を徹底的にやりましょう。 ポインタだけに絞った参考書とかもあります。 そうしないと、これからもたびたび質問しないとならない状況になりますよ。

KabosuOrange
質問者

お礼

おっしゃる通りです… ポインタだけの参考書はもっておりまして参考にしながら作っています。

関連するQ&A