2017-04-14 10 views
-1

私はCでプログラムをやっています、プログラムはそのファイル内のファイルを読み込み、プログラムはX "要素"を見つけます。時には3、時には4 ...各要素について、プログラム中に値を変更するつもりですが、初期化する必要があります。ファイル上の要素の数に応じてXの構造体を使う必要がありますか?

問題は、X構造体を初期化することができるかどうかわからないということです(ファイルに依存します)。どのようにすればよいかわかりませんそれ...

+0

確かに[4 ] '、確かに分かっていないが、' 20 'よりも明らかに少ないことを知っているならば、 '20'を宣言して(あなたが実際にどれくらいの数を記入するかを把握する)。手がかりがない場合は、struct *へのポインタを宣言して、それらの '4 'にスペースを動的に割り当てます。 'malloc'を実行してから' realloc'して関連する記憶域のサイズを変更し、必要な数だけ保持します。このサイトで**動的メモリ割り当て構造**を検索するだけで、何百もの例が見つかります。 –

+0

そして、このサイトは「私はこのコードでXを実行しようとしていて、うまくいきません。どこが間違っていますか?」サイト。だから、スタックオーバーフローへようこそ。すぐに[** About **](http://stackoverflow.com/tour)のページを読んでください。また、[**質問する方法**]についてのリンクもご覧ください(http://stackoverflow.com/questions/how-to-ask)と[**最小限で完全で検証可能なサンプルの作成方法**](http://stackoverflow.com/help/mcve)を参照してください。あなたのコードや関連するエラーを含む必要な情報を提供することで、皆さんがあなたの質問にお手伝いします。 –

答えて

1

nはあなたが必要とする構造体の数であると

struct s{ 
     int a; 
     int b; 
}; 

があなたの構造体である場合には、

struct s* X = calloc(n, sizeof(struct s)); 

は、n個の構造体のための十分なメモリを割り当てます。

あなたはこのようなk番目のエントリを変更することができます:あなたは、構造体の `4`宣言し、配列の最大値を持って知っていれば、`、

(X + k)->a = 5; 

または

X[k].a = 5; 
+1

ところで、あなたはCでmalloc/callocの結果をキャストすべきではありません。http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – HolyBlackCat

+0

もし私がそうでなければ、MSVS2015はエラーを返す°〜° – chrissidtmeier

+0

まあ、それはC++コンパイラなので、その特異性を持っています。 –

関連する問題