みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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;
}

としたら、エラーは出ませんが、実行すると何も表示されませんでした。

投稿日時 - 2004-12-08 11:32:34

QNo.1117834

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>構造体で二次元配列を扱うことは出来ますか?
できます。

>エラーは出ませんが、実行すると何も表示されませんでした。
よく分かりませんが、struct aaa iryo[99]; のメモリ確保がうまくいってないかもしれません。単純計算で1660428バイトのスタックエリアが必要です。static にしてみるか、要素数を減らしてみてはどうでしょう。

二次元配列を使ってみたいのであれば、iryo[i].s_nameをiryo[i].s_name[10]などに変更してみたら実感できるかもしれません。

投稿日時 - 2004-12-11 07:15:15

ANo.2

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

投稿日時 - 2004-12-08 15:48:00

ANo.1

>char s_name[128][128];

の部分が

>char s_name[128];

という気がしますが、こちらでは正常に表示されました。

>char s_name[128][128];

のままだとオーバーフローしましたが…

投稿日時 - 2004-12-08 12:19:51