ページ 1 / 1
標準出力出来ず セグメントエラー
Posted: 2017年5月24日(水) 16:07
by tennga
コード:
#include<stdio.h>
#include<string.h>
#define LEN 20
#define N 7
void swapstr(char *s1,char *s2)
{
char tmp[LEN];
strcpy(tmp, s1);
strcpy(s1, s2);
strcpy(s2, tmp);
}
int main(void)
{
char str1[N][LEN];
int i,j,k,population[N],tmp;
FILE *fp;
fp = fopen("kobe_popul.txt","r");
if(fp == NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}
for(i=0;i<N;i++){
fscanf(fp,"%s %d",str1[i], &population[i]);
}
printf("区の名称を入力せよ: ");
scanf("%s",str1[i]);
fprintf(fp,"%s: %d\n", str1[i], population[i]);
fclose(fp);
return 0;
}
キーボードから入力しても出力出来ずセグメントエラーになり一考に分かりません、、、
教えてください!
ちなみに実行結果がこのようになります。
実行例
$ ./a.out
区の名称を入力せよ: Higashinada
Higashinada: 213342
$ ./a.out
区の名称を入力せよ: Hyogo
Hyogo: 106823
Re: 標準出力出来ず セグメントエラー
Posted: 2017年5月24日(水) 17:30
by purin52002
コード:
printf("区の名称を入力せよ: ");
scanf("%s",str1[i]);
fprintf(fp,"%s: %d\n", str1[i], population[i]);
この時点でi=Nになっているので、配列の範囲外にアクセスしているような気がします。
Re: 標準出力出来ず セグメントエラー
Posted: 2017年5月24日(水) 17:31
by YuO
for文から出た後,i == Nになっています。
その後のscanfで,str1
,つまりはstr1[N]にアクセスしようとしています。
str1はN個の要素しかないので,str1[N]へのアクセスはしてはいけません。
オフトピック
デバッガ使って一行ずつ実行すればすぐわかると思うのですが……。
Re: 標準出力出来ず セグメントエラー
Posted: 2017年5月24日(水) 22:42
by みけCAT
読み込みモードで開いたファイルにfprintfしようとしているのもおかしいと思います。
Re: 標準出力出来ず セグメントエラー
Posted: 2017年5月25日(木) 02:41
by かずま
tennga さんが書きました:キーボードから入力しても出力出来ずセグメントエラーになり一考に分かりません、、、
char str1[N][LEN]; を
char str1[N+1][LEN]; に修正し、
fprintf(fp, "%s: %d\n", str1
, population); を
次のように修正すればよいのではありませんか?
コード:
for (i = 0; strcmp(str1[i], str1[N]); i++) ;
if (i < N)
printf("%s: %d\n", str1[i], population[i]);
else
printf("not found\n");
質問の回答は放置しないで、必ず返信してください。