配列構造体

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
SSS

配列構造体

#1

投稿記事 by SSS » 15年前

こんにちは。
初めて質問させていただきます。

名前、住所、誕生日、電話番号を格納する構造体の配列を10個作って、10人分のデータを入れたいのですがなぜか途中でコマンドプロンプトの表示が崩れて(文字化けが起こる)正常に終了できなくなってしまいます。
コンパイラは特にエラーを吐いていないので理由が分からなくて困っています。

使用しているコンパイラは「LSI C-86 Ver 3.30 試食版」です。

よろしくお願いします。
#include<stdio.h>
#include<string.h>

struct date{
	char name[128];
	char address[128];
	char birthday[128];
	char phonenumber[128];
};

int getkey(char*a){
	int i;
	for(i=0;(a=getchar())!='\n';i++){
	}
	a='\0';
	return strlen(a);
}

int getdate(struct date *p1){
	
	char input[128];
	
	printf("「名前」、「住所」、「生年月日」、「電話番号」を入力してください\n名前をどうぞ(全角で10文字まで)\n>");
	
	getkey(input);
	sprintf(p1->name,input);
	
	printf("住所をどうぞ\n>");
	getkey(input);
	sprintf(p1->address,input);
	
	printf("生年月日をどうぞ(yyyy/mm/dd)\n>");
	getkey(input);
	sprintf(p1->birthday,input);
	
	printf("電話番号をどうぞ\n>");
	getkey(input);
	sprintf(p1->phonenumber,input);
	
	return 0;
}

int main(void){
	
	int i=0;
	struct date Pdate[10];
	
	for(i=0;i<6;i++){
		printf("\n%d人目の",i+1);
		getdate(&Pdate);
	}
	
	for(i=0;i<6;i++){
		printf("\n%d人目の\n名    前:%s\n",i+1,Pdate.name);
		printf("住    所:%s\n",Pdate.address);
		printf("生年月日:%s\n",Pdate.birthday);
		printf("電話番号:%s\n",Pdate.phonenumber);
	}
	
	return 0;
}

non

Re:配列構造体

#2

投稿記事 by non » 15年前

BCCで動かしてみましたが、字化けはおきませんでした。
コンパイラをもうすこし、まともなものに変えてみてはいかがですか。

toyo

Re:配列構造体

#3

投稿記事 by toyo » 15年前

ちょろっと検索したらLSI-Cのスタックサイズは2500バイトとの情報がありました
http://hp.vector.co.jp/authors/VA029427/v-lsic2.htm
512バイトの構造体10個だと完全にスタックオーバーフローしちゃいます
試食版だとスモールモデルでintも2バイトだし制限多いので他のコンパイラの使用をお勧めします

SSS

Re:配列構造体

#4

投稿記事 by SSS » 15年前

配列の大きさ調整したらちゃんと動くようになりました!!
ありがとうございます。

課題で指定されてるコンパイラなので厳しいですねぇ・・・
少し工夫しながら使ってみようと思います。

Hermit

Re:配列構造体

#5

投稿記事 by Hermit » 15年前

どうしても lsic330c 試食版にしたいなら、
スタックサイズが変更できたはずです。
smallモデルだから、プログラムエリアが64kb スタック領域と、heap領域の合計が64kb
合計で 128kb MAX までは使えたと記憶してますが・・・
最近 lcc というと、AT&T の lcc がはいっているので、lsic は入れたくないので・・・
チェックしてません(^^;

閉鎖

“C言語何でも質問掲示板” へ戻る