C言語において,構造体内で定義した配列の大きさをmain関数内の場合分けによって決定したいのですが,どのように書けば良いのでしょうか.
例えば,scanfで取得したint型の値が10以上ならば配列の大きさを表す変数を5,そうでない場合は10といった風にしたいです.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
malloc
で確保するのであれば、実用的には可能です。ただし可変サイズの配列は1つだけ。
C
1#include <stdio.h> 2#include <stdlib.h> 3 4typedef struct { 5 int value; 6 int size; 7 int table[1]; 8} foo; 9 10int main () { 11 int n; 12 int size; 13 foo *p; 14 int i; 15 16 if( scanf("%d",&n) != 1 ) exit(1); 17 if( n>=10 ){ 18 size = 5; 19 }else{ 20 size = 10; 21 } 22 p = (foo*)malloc(sizeof(foo)+sizeof(int)*(size-1)); 23 p->value = n; 24 p->size = size; 25 for(i=0; i<size; i++){ 26 p->table[i] = 0; 27 } 28}
可変サイズの配列が2つ以上必要な場合でも、不可能ではないでしょうが、各要素へのアクセスが、p->table[i]
のようなシンプルな形では無理でしょうね。
投稿2019/12/06 15:21
総合スコア85888
0
こんにちは。
gccなら普通にできると思います。
C
1int main() 2{ 3 int n; 4 scanf("%d", &n); 5 int array[n]; 6 : 7}
この機能はVLAと呼ばれています。
標準規格ではC言語にはあり、C++にはありません。
しかし、gccはC/C++両方ともサポートしており、VC++は両方ともサポートしていません。
ごめんなさい。構造体の中の配列はVLAにはできませんでした。他の方の回答と同じく「標準規格内ではできません」となります。
確かgccはgnu拡張でサポートしているような話を聞いた記憶がありますが、標準規格外です。
投稿2019/12/06 08:43
編集2019/12/06 09:39総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/06 09:32
2019/12/06 09:32
2019/12/06 09:34
2019/12/06 09:35
2019/12/06 09:35
2019/12/06 09:38 編集
2019/12/06 10:45
2019/12/06 14:37 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/13 08:43
2019/12/13 09:10
2019/12/13 09:15
2019/12/13 11:56