こちらの過去スレッドなども含めて検索したのですが解決しなかったので新しくトピックを建てさせていただきました。
例えば、次のような.txtファイルがあったとします。
ha-34-22 MM-234214 JP AA 34-22
○×○○×○×○××
ha-4-22 MM-234414 JP AA 4-15
○×○○×××
それぞれのデータにおいて例えば×の数を数えて以下のように.csvに出力するとします。
34-22,5
4-15,4
.txtには、全部で5000個近くのデータがあるものとし、以下のようなプログラムをVC++2010EEにて組みました。
#include <stdio.h>
#include <string.h>
int Total, i;
char StrBuf[64], Dust[32], Name[16];
char MainArray[28];
int ArrayNum;
FILE *lf, *sf;
void main(){
Total = 0;
i = 0;
lf = fopen( "Data.txt", "r" );
sf = fopen( "Score.csv", "w" );
while( fgets(StrBuf,64,lf) != NULL ){
if( Total%2 == 0 ){
sscanf( StrBuf, "%s %s %s %s %s", Dust, Dust, Dust, Dust, Name );
fprintf( sf, "%s", Name );
} else if( Total%2 == 1 ){
memset( MainArray, 0, 28 );
sscanf( StrBuf, "%s", MainArray );
i = 0;
ArrayNum = 0;
while( MainArray[i] != 0 ){
if( MainArray[i] == '×' ){
ArrayNum++ ;
}
i++;
}
fprintf( sf, ",%d\n", ArrayNum );
}
Total++;
memset( StrBuf, 0, 64 );
}
fclose( lf );
fclose( sf );
}
しかし、これを実行したところ、.csv上で2226行目.txt上なら4451行目に当たるデータがおかしくなり、おそらくそのせいで
DNS.exe の 0x5c0df878 (msvcr100d.dll) でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000064 を読み込み中にアクセス違反が発生しました。
というエラーがfgets()に関して起こりました。
おかしな出力というのは、
本来であれば
6777-33というデータが出力されなければいけないのにも関わらず、67までしか出力されていないのです。
その行だけ文字数が異常に多いとかそんなことはなく、4450行まででいったん区切り、4451行目以降を別に走らせると少なくとも4451行目は無事通過しますが、今度は51行目ぐらい(本来なら4501行目ぐらい)で同様の現象が起こります。
どうしても分からないのでご教授いただけないでしょうか