先週からC言語を始めた超初心者です。
まだ右も左も分からない未熟者ですがよろしくお願いします。
現在ファイル操作を行っています。
そこで、
パターン[A]
パターン[B]
・
・
・
パターン[L]
パターン[M]
というファイルがあり、これを読み込み
char mPtnData[12][64];
という多次元配列に格納しようとしています。
そこで、以下のようなコードを書いたのですが、
このファイルを読み込んで配列に格納できません。
どなたかアドバイスをいただけませんでしょうか?
お願いいたします。
#include <stdio.h>
#define SYSPTN_FILE C:\\研修\\C言語\\csvsep\\work\\c_sysptndata
char mPtnData[12][64];
void Yomikomi(void);
void main(int argc, char *argv[])
{
Yomikomi();
}
void Yomikomi(void)
{
FILE *fp;
int c,i,j;
/*c_systpndataファイルを開く*/
fp=fopen(SYSPTN_FILE,r);
/*c_systpndataファイル読み込み*/
for (j=0;j<13;j++){
for (i=0;(c=fgetc(fp))!=EOF;i++){
↑ここで「Debug Assertion Faild!」というエラーが出ます..。
mPtnData[j][i];
}
}
fclose(fp);
}
ファイルは開けているか?とか、Assertionは具体的には何か、とかありますが。
取り敢えずうまくいっているとして、
このソースでは内側のループだけでファイルの終わりまで行ってしまいますね。
PAI様、早速のレスありがとうございます。
具体的な「Debug Assertion Faild!」のエラー内容は以下の通りです。
Program:C:\\研修\\C言語\\csvsep\\work\\c_sysptndata
Filegetc.c
Line41
Expression:stream!=NULL
For information on how your program
Can cause an assertion failure,see
the Visual C++ documentation on asserts
コードは思い切り間違っておりました。
お恥ずかしいです。
少し書き直してみました。
デバッグをして動きを確かめたいのすが、上記のエラーのために
動きが分かりません...。
少し頭がパニックになってきてしまいましたので頭を冷やしてみます。
またアドバイスをいただけるのでしたらよろしくお願いいたします。
void Yomikomi(void)
{
FILE *fp;
int i,j;
char c;
/*c_systpndataファイルを開く*/
fp=fopen(SYSPTN_FILE,r);
/*c_systpndataファイル読み込み*/
for (j=0;j<13;j++){
for (i=0;((c=fgetc(fp))!='\n');i++){
mPtnData[j][i] = c;
}
}
//ファイルのクローズ
fclose(fp);
}
すみません、自己レスです。
エラー内容を見ていくと、指定していたファイル格納場所の記述が
間違っていた為、このエラーが出ていることがわかりました。
これを訂正すると、ファイルが開け配列に無事内容を格納する事ができました。
お騒がせして申し訳ありませんでした。
今後も度々質問させていただくと思いますが、またよろしくおねがいいたします。
で、fopenは成功しているのでしょうか?
Assertionが発生した時のi、jの値はいくつですか?
あら、行き違ってしまいましたね...
>char mPtnData[12][64];
と宣言してるんですよね?しかし
for (j=0;j<13;j++){
for (i=0;((c=fgetc(fp))!='\n');i++){
mPtnData[j][i] = c;
}
}
の部分でjは12まで増えますが、実際に確保されてる領域は
mPtnData[0][64]
.
.
.
mPtnData[11][64]
なので、おかしくなってるのでは?
あってるのかなぁ。自信ないですが・・・
#質問するのは大いに結構だと思いますが、デバッグはしてますか?
#まずは怪しいところにブレークを貼ってデバッガを使ってみましょう
解決してましたか・・・。
行き違いになってしまったみたいで申し訳ありません。
デバッグはたどたどしいながらもやっています。
ただ、今回はブレークポイントをはって、ステップイン、ステップオーバーを
しようとするとエラーが出てきてしまったのでどうにもならずに質問させていただきました。
ご迷惑をおかけして本当に申し訳ありません!!
そして、きちんとデバッグしてみるとやはりおかしな動きをしてしまいました。
ここには「解決」マークをつけてしまったで、新たに質問させていただきました..。