• 締切済み

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

  • 文字化けを直したいのですが・・・

    ご覧いただきありがとうございます。 pcのおそらく、数字?などが文字化けしてしまうことがよくあります。 二重矢印の下向きのような文字が決まって表示されてしまいます。 どうすれば改善出来るでしょうか?分かる人いらっしゃいましたら、ご教授お願い致します。 環境は、OS windowsXP  ブラウザ firefox

  • fprintfでの文字化け

    Cで作ったプログラムなのですが最後の部分でファイルに出力すると数字が 文字化けして出てきます(‰など)その原因を教えて頂ければ嬉しいです 他にも何かあれば教えてください プログラミングは詳しくないのでゴロゴロ見つかるかもしれません 【プログラム】 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> int a,i,j,k,t; double p,p1,b; int X[999][1000],Y[999][1000]; int s0,s1,delta; int main(void) { int**X = calloc(sizeof(int),sizeof(int)*1000); int**Y = calloc(sizeof(int),sizeof(int)*1000); FILE *output; output=fopen("monte.dat","w"); b = 0.01; /*逆温度*/ srand((unsigned int)time(0)); /*メモリの確保*/ if( X == NULL ){ exit( EXIT_FAILURE ); } for(i=0; i<=999; ++i){ /* 各列分の領域を割り当てる */ X[i] = (int*)calloc(sizeof(int),sizeof(int)*1000); } if( Y == NULL ){ exit( EXIT_FAILURE ); } for(i=0; i<=999; ++i){ /* 各列分の領域を割り当てる */ Y[i] = (int*)calloc(sizeof(int),sizeof(int)*1000); } /*終わり*/ /*初期配列の設定*/ for(i=0;i<1000;i++){ X[0][i]=a; a = (int)((rand() / ((double)RAND_MAX+1.0)) * 2);//debag } /*終わり*/ for(t=0;t<2;t++){ //debag /*配列中a番目を抽出*/ a = 10; //debag /*終わり*/ /*a番目のスピンを逆にした配列作成*/ for(j=0;j<1000;j++){ Y[t][j] = X[t][j]; } Y[t][a] = (X[t][a]+1)%2; /*終わり*/ /*遷移確率p1計算*/ s0=0; s1=0; for(k=0;k<1000;k++){ s0=s0+pow(-1,X[t][k]+X[t][k+1]);//(11),(00)なら値1 s1=s1+pow(-1,Y[t][k]+Y[t][k+1]);//(10),(01)なら値-1 } delta = -s1 + s0; p1 = 0.5 * (1 - tanh(0.5 * b * delta)); printf("%d %d %d %f ",s0,s1,delta,p1); //←この時点ではX[t][]は正しく出力する /*終わり*/ /*新しい配列(i番目の符号を交換するか)*/ p = (double)((rand() / ((double)RAND_MAX+1.0)) * 1); for(j=0;j<1000;j++){ X[t+1][j] = X[t][j]; } if(p<=p1){ X[t+1][a] = (X[t][a]+1)%2; printf("交換したよ! %d → %d\n",X[t][a],X[t+1][a]); } else{ X[t+1][a] = X[t][a]; printf("交換しないよ!\n"); } /*終わり*/ } /*記入*/ for(i=0;i<1000;i++){ fprintf(output,"%d ",X[0][i]); //←ここが文字化けする } fprintf(output,"\n"); for(i=0;i<1000;i++){ fprintf(output,"%d ",Y[0][i]); //←出力されない } /*終わり*/ fclose(output); return 0; } 【プログラム終】

  • 文字化けしない書き方

    CString str = "%#.3f" という文字列に関して、数字部分をint valで置き換えたいなと思っています。 そこで、Formatを使って以下のように書きましたが、%#.が文字化けしてしまいます。 str.Format("%s%df", "%#.", val); 1文字ずつなら表示されるようなのですが、%#あるいは#.とやると文字化け(□)になって しまいます。なので、 str.Format("%s%s%s%df", "%", "#", ".", val); とやると、表示されるには表示されるのですが、str.Format("%s%df", ...)という書き方で 書けたらなと思っています。何か方法はないでしょうか。 よろしくお願いいたします。 環境はWindowsXP, VC2005++ &MFC です。

  • ExcelVBAを使ったときの文字化け

    ダウンロードしたhtmlファイルを、ExcelVBAを使ってExcelに転記しています。 ファイル数は20程度、各々5列100行程度のデーターで、1つのファイルを1つのシートに転記しています。 ダウンロードした状態では文字化けはなくすべて正常に表示されているのですが、エクセルに転記すると文字化けするものがあります。 どのようなことが原因として考えられるのでしょうか。 環境はOS win2000pro + office2000で使っています。 よろしくお願いします。

  • プルダウンの文字化け

    プルダウンメニューの中身がアルファベットと数字以外は絵文字のような文字化けになるか何も表示しないかになります。 Safeモードでの再起動や、ttfCacheの削除はしました。 いろいろなサイトを探してみましたが、対策が見つけられません。 よろしくお願いします。

  • 文字化けしてしまいました。

     文字化けの為、元々は何が表示されているのか分からないのですが、このHP(http://homepage2.nifty.com/winfaq/fontstrouble.html)の初めの方に書かれている「ウィンドウ右上の最大化や最小化ボタンが数字などになる」(箇条書き部分)と以下5列の左側の記号(?)が文字化けの為に正確に表示されません。これはあくまで一例で、他のHPでも同様の文字化けが起きています。  今まで試した対処法は、 ・「ttfCache」ファイルを削除する ・「Marlett.ttf」を用いた対処法(長いので割愛します) ・Safeモードを実行する の3つです。以上を実行しましたが、未だ解決されません。教えてgooを検索しても上記以外の解決法を見つけることができませんでした。既出でしたら申しわけありません。どなたか解決法を教えて下さい。

  • 文字化け

    OSはMeです。昨日から細かい場所で文字化けがおこっていて困っています。ネット上の普通の文字やおおまかな所は大丈夫なんですが・・・ たとえば、ネット上の一つ戻る矢印の横が6という数字になっていたり、チェックボックスが四角ではなくなっていたり・・・言葉で表すのは難しいのですが・・・ 数字に文字化けが多いみたいです。 ウイルスには犯されていませんので、どういった原因?またどうやったら直せるのでしょうか?

  • 文字化けについて

    WindowsXPのIE6で特定のサイトを見ると文字化けしてしまいます。 文字コード指定(Shift-JIS)は記載しており、FTPでのファイル転送も問題がない場合 文字化けする原因としてどのような事が考えられますか? 以下で文字化けする恐れのある点はあるでしょうか。 ■javascriptを直接HTMLに記載 ■swfファイルを貼り付けています ■メールアドレスの収集を防ぐ為、@マーク部分を「@」と記載 ■外部スタイルシートのファイル名を大文字にしています ■ドキュメントタイプを宣言していません ちなみにWin2000のIEでは問題がなく、WinXPのIEだと文字化けしてしまいます。 FTPでファイルを転送(上書き)し直すと文字化けが一時的に解消するものの、 数時間後に見るとまた化けてしまいます。 これはキャッシュの問題か何かでしょうか。 検索しても該当例がなく困っており、アドバイスいただけると助かります。

    • ベストアンサー
    • HTML
  • 文字化け

    あるときから、デスクトップアイコンの文字、お気に入りに入ってる文字等、すべて 横棒みたいな表示になってしまいました。 ttfCache等削除しようと検索しましたが出てきません。。 フォルダ表示で、全てのフォルダとファイルの表示をするようにはしてあります。 セーフモードでの表示は正常でした。 普通に立ち上げると、文字化け?してしまってます。 何度か、再起動させてみたけどダメでした。 何か直す方法あれば教えてください

  • ビットマップフォントをやめると文字化けしてしまう

    デスクトップやブラウザの文字などなんか微妙にカクカクしていて dpkg-reconfigure fontconfig-fontを実行し、ビットマップフォントをやめ、字はきれいになったのですが日本語が文字化けしてしまいます。 文字化けしたものは正方形よりちょっと縦長な線の中に 16進数が入っている状態で中の数字を調べたところutf-8の 16進数表示になっているの(「あ」と打つとutf-8の「あ」に対応した16真数の数字が入っているということです)ですがブラウザはutf-8になっているのになぜか文字化けしてます。 dpkg-reconfigure localesでjp_JP.UTF-8を選んでも文字化けは直りませんでした。どうすれば文字化けを直せるのでしょうか。