- 締切済み
C言語での構造体
C言語の構造体で配列を扱うとき、 struct ○○{ char ○○[○] とすれば出来ますが、同じようにして構造体で二次元配列を扱うことは出来ますか? 一度組んでみたのですが、 #include<stdio.h> struct aaa{ int no; char name[128]; char y_name[128]; char n_name[128]; char s_name[128][128]; }; int main(void){ int i; struct aaa iryo[99]; printf("入力前\n"); /* 構造体配列に scanf()でデータを入力 */ for(i = 0; i < 3; i++) { // printf("input...\n"); scanf("%d", &iryo[i].no); scanf("%s", iryo[i].name); scanf("%s", iryo[i].y_name); scanf("%s", iryo[i].n_name); scanf("%s", iryo[i].s_name); } printf("入力後\n"); printf("出力前\n"); /* 入力データの確認 */ for(i = 0; i < 3; i++) { printf("番号:%02d 内容:%s Y分岐:%s N分岐:%s 他分岐:%s\n", iryo[i].no, iryo[i].name, iryo[i].y_name, iryo[i].n_name, iryo[i].s_name); } printf("出力後\n"); printf("%d",sizeof(struct aaa)); return 0; } としたら、エラーは出ませんが、実行すると何も表示されませんでした。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- JaritenCat
- ベストアンサー率37% (122/322)
>構造体で二次元配列を扱うことは出来ますか? できます。 >エラーは出ませんが、実行すると何も表示されませんでした。 よく分かりませんが、struct aaa iryo[99]; のメモリ確保がうまくいってないかもしれません。単純計算で1660428バイトのスタックエリアが必要です。static にしてみるか、要素数を減らしてみてはどうでしょう。 二次元配列を使ってみたいのであれば、iryo[i].s_nameをiryo[i].s_name[10]などに変更してみたら実感できるかもしれません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
何がしたいのか良くわからないけど char s_name[128][128]; の部分が2次元配列を使いたいってところなんでしょうね。 でも iryo[i].s_name としての使い方は2次元配列になってませんね。
- alphion
- ベストアンサー率19% (27/136)
>char s_name[128][128]; の部分が >char s_name[128]; という気がしますが、こちらでは正常に表示されました。 >char s_name[128][128]; のままだとオーバーフローしましたが…