• 締切済み

fprintfで文字化け

fprintfで数字をファイルに"w"モードで書き込んでいるだけなのですが、書き込む回数(数字の数)が大きいだけファイルに書き込んでも文字化けしてしまいます。原因は何が考えられるでしょうか? ちなみにprintfではちゃんと表示されています。 環境はWindowsXPでCygwinを使っています。

みんなの回答

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

直接の原因かどうかは、入力ファイルが提示されていないので、判りませんが、危ないところを指摘しておきます。 while(fscanf(fp2,"%d",&i) != EOF){ cw[i]++;  ・・・iは0<=Nの範囲内でないと、メモリ破壊を起こします。 そのチェックがされていません。 for (c = 1; c <=ww ; c++){ ・・・wwはN以内でないといけないが、Nを越えている可能性があります。 fprintf(fp1,"%d ",rw[c]);  } 1.上記の2点で、もし、正常範囲を逸脱したら、画面にその内容を表示して、プログラムを停止するように、してください。 2.もし、1で停止した場合は、iとwwを正常範囲に強引に書き換えて、継続するように、プログラムを修正してください。

  • yonfa
  • ベストアンサー率52% (22/42)
回答No.3

本来出力されるべき内容と文字化けしてしまった結果も提供してもらえれば、原因特定に役立つと思いますよ。

noname#22058
noname#22058
回答No.2

入力ファイルの内容も見せてくださるとありがたいです。 こちらで勝手に作ってしまうと、同じ現象が発生しないことが あり得ますので。

noname#22058
noname#22058
回答No.1

ソースコードを見せてください。

mr_child4
質問者

補足

ソースコードです。 ちなみにSolarisでは問題なかったです。 #include <stdio.h> #include <math.h> #include <stdlib.h> int main(int argc,char **argv) { int i,m,ww,temp,c,rm,cm,rmt,cmt; int N; int *rw,*cw; FILE *fp1,*fp2; N=atoi(argv[1]); rw = (int*)malloc(sizeof(int)*(N+1)); cw = (int*)malloc(sizeof(int)*(N+1)); for (m = 0; m <= N; m++){ rw[m]=cw[m]=0 ; } temp=0; ww=1; if ((fp2 = fopen("test.txt","r")) == NULL){ exit(-1); } while(fscanf(fp2,"%d",&i) != EOF){ cw[i]++; if(temp<i){rw[ww]=rw[ww]+1;} if(temp>=i){ww++;rw[ww]=rw[ww]+1;} temp=i; } fclose(fp2); rm=rw[1]; for (m = 2; m <= ww; m++){rmt=rw[m]; if(rm<rmt){rm=rmt;} } cm=cw[1]; for (m = 2; m <= N; m++){cmt=cw[m]; if(cm<cmt){cm=cmt;} } fp1 = fopen("result.txt","w"); fprintf(fp1,"%d %d\n",N,ww); fprintf(fp1,"%d %d\n",rm,cm); for (c = 1; c <=ww ; c++){ fprintf(fp1,"%d ",rw[c]); } fprintf(fp1,"\n"); for (c = 1; c <=N ; c++){ fprintf(fp1,"%d ",cw[c]); } fprintf(fp1,"\n"); fclose(fp1);  return (0); }

関連するQ&A