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

解決済みの質問

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)"の配列部分を単純に変数にするとこのようなエラーは出ないのですが。
なぜエラーが出るのか、どなたかご教授願います。

投稿日時 - 2009-05-20 15:43:00

QNo.4975001

すぐに回答ほしいです

質問者が選んだベストアンサー

>int AN[11][1];
この定義と

>for(j=0;j<2;j++)
このfor文との間で、整合性がありません。
jが0~1を回るということは、配列の定義範囲外の領域にアクセスすることになります。

また、配列初期化のループを終わった後のiとjの値をそのまま使って
配列に格納しようとしているのは、大いにまずいです。

投稿日時 - 2009-05-20 15:53:30

お礼

ご教授ありがとうございます。何分、久しぶりにプログラムを組むもので配列の仕組みなどをすっかり忘れていました。
解決しました。ありがとうございました。

投稿日時 - 2009-05-20 16:00:27

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

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

回答(2)

ANo.1

添え字で使ってる i とか j の値は大丈夫?

投稿日時 - 2009-05-20 15:46:44

お礼

ご指摘ありがとうございます。たしかに添え字に使っているi,jの値がおかしかったです

投稿日時 - 2009-05-20 15:58:57