• 締切済み

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; } としたら、エラーは出ませんが、実行すると何も表示されませんでした。

みんなの回答

回答No.3

>構造体で二次元配列を扱うことは出来ますか? できます。 >エラーは出ませんが、実行すると何も表示されませんでした。 よく分かりませんが、struct aaa iryo[99]; のメモリ確保がうまくいってないかもしれません。単純計算で1660428バイトのスタックエリアが必要です。static にしてみるか、要素数を減らしてみてはどうでしょう。 二次元配列を使ってみたいのであれば、iryo[i].s_nameをiryo[i].s_name[10]などに変更してみたら実感できるかもしれません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

何がしたいのか良くわからないけど char s_name[128][128]; の部分が2次元配列を使いたいってところなんでしょうね。 でも iryo[i].s_name としての使い方は2次元配列になってませんね。

  • alphion
  • ベストアンサー率19% (27/136)
回答No.1

>char s_name[128][128]; の部分が >char s_name[128]; という気がしますが、こちらでは正常に表示されました。 >char s_name[128][128]; のままだとオーバーフローしましたが…

関連するQ&A