標準出力出来ず セグメントエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tennga
記事: 13
登録日時: 7年前

標準出力出来ず セグメントエラー

#1

投稿記事 by tennga » 7年前

コード:

#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
最後に編集したユーザー tennga on 2017年5月26日(金) 10:05 [ 編集 1 回目 ]

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: 標準出力出来ず セグメントエラー

#2

投稿記事 by purin52002 » 7年前

コード:

printf("区の名称を入力せよ: ");
scanf("%s",str1[i]);
fprintf(fp,"%s: %d\n", str1[i], population[i]);
この時点でi=Nになっているので、配列の範囲外にアクセスしているような気がします。
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: 標準出力出来ず セグメントエラー

#3

投稿記事 by YuO » 7年前

for文から出た後,i == Nになっています。
その後のscanfで,str1,つまりはstr1[N]にアクセスしようとしています。
str1はN個の要素しかないので,str1[N]へのアクセスはしてはいけません。
オフトピック
デバッガ使って一行ずつ実行すればすぐわかると思うのですが……。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 標準出力出来ず セグメントエラー

#4

投稿記事 by みけCAT » 7年前

読み込みモードで開いたファイルにfprintfしようとしているのもおかしいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: 標準出力出来ず セグメントエラー

#5

投稿記事 by かずま » 7年前

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");
質問の回答は放置しないで、必ず返信してください。

返信

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