- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語 構造体)
C言語・構造体についての初歩的な質問
このQ&Aのポイント
- C言語で構造体について疑問があります。ポインタの理解もまだできていません。
- Windows7とVisual Studio 2010を使用して、WinAPIの勉強中にプログラムを作成しています。
- 構造体Aのメンバnameに別の変数Bufの内容をコピーしたいのですが、ポインタの問題でうまくいきません。解決方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
if(data->name!=NULL)free(data->name); data->name=calloc(data->name, strlen(Buf) + 1, sizeof(char)); strcpy(data->name, Buf); ところで、data自体のmallocはやってますよね?
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
calloc じゃなくて malloc で十分だと思うし, その前の free も「NULL かどうかの判定」は不要だと思うの>#1.
質問者
お礼
ありがとうございました。 最小限のプログラムで無駄なく書けるようになりたいです。
質問者
補足
自分のプログラムではmallocで大丈夫でした。
- yhc3594
- ベストアンサー率27% (25/92)
回答No.3
原因はきちんと整理できています。 ポインター変数を使うときはいろいろと注意が必要ですが、今回の場合は 単純に構造体を実態として定義すれば事足りると思います。 struct A{ fixed char name[128]; double i; } ご参考まで
質問者
お礼
回答ありがとうございました。 何とか目的のことはできました。
- kmee
- ベストアンサー率55% (1857/3366)
回答No.2
> 初歩の質問ですがお手柔らかに… > ポインタもまだ理解しきれていません。 それなら、まずポインタ(および、動的なメモリの確保と解放)の勉強を徹底的にやりましょう。 ポインタだけに絞った参考書とかもあります。 そうしないと、これからもたびたび質問しないとならない状況になりますよ。
質問者
お礼
おっしゃる通りです… ポインタだけの参考書はもっておりまして参考にしながら作っています。
お礼
回答ありがとうございました。 構造体自体のmallocはしています。 コピーする前に領域を確保しなくてはいけなかったのですね。