- ベストアンサー
Borland C CSVファイル読み込み
CSVファイルを読み込み、読み込んだ値で計算を行うプログラムを作っています。 ・環境はWindows VISTA UltimateでBorland C++ Compiler 5.5 ・CSVファイルのデータの形式は 1,4532 4,2131 6,4301 . . ・データ数は決まっていて今のところ全部で12個 そして以下のようにCSVの読み込みプログラムを試しに組んだ所、実行時エラーがでました。 #include <stdio.h> #include <stdlib.h> #include <string.h> void main(void) { int AN[11][1]; int i=0,j=0,c=0; char buff[1024], *tp; FILE *fp; /*配列初期化*/ for(i=0;i<11;i++) { for(j=0;j<2;j++) { AN[i][j]=0; } } fp=fopen("test1.csv","r"); if(fp==NULL) { /* オープン失敗 */ printf("ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } while( fgets(buff, 1024 , fp) != NULL ) { tp=strtok(buff , ","); if (tp !=NULL) {AN[i][j] = atoi(tp);} printf("%d\n",AN[i][j]); tp = strtok(NULL , ","); if (tp !=NULL) {AN[i][j+1] = atoi(tp);} printf("%d\n",AN[i][j+1]); i++; } fclose(fp); } 実行するとファイルクローズの後、問題が発生したためプログラムを終了しましたと出ます。"AN[i][j]=atoi(tp)"の配列部分を単純に変数にするとこのようなエラーは出ないのですが。 なぜエラーが出るのか、どなたかご教授願います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>int AN[11][1]; この定義と >for(j=0;j<2;j++) このfor文との間で、整合性がありません。 jが0~1を回るということは、配列の定義範囲外の領域にアクセスすることになります。 また、配列初期化のループを終わった後のiとjの値をそのまま使って 配列に格納しようとしているのは、大いにまずいです。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
添え字で使ってる i とか j の値は大丈夫?
お礼
ご指摘ありがとうございます。たしかに添え字に使っているi,jの値がおかしかったです
お礼
ご教授ありがとうございます。何分、久しぶりにプログラムを組むもので配列の仕組みなどをすっかり忘れていました。 解決しました。ありがとうございました。