• ベストアンサー

fgetsの使い方

burroughs6の回答

  • ベストアンサー
回答No.7

txtファイルの3行目の次が空行(改行だけの行)になっていないですか? 3行目の終わりのCRLFの次にもうひとつのCRLFがないか、ダンプで確認してみて下さい。

ume_chan_m
質問者

お礼

0d 0aがCR,LFならば、3行目の終わりの0d 0aのみで もうひとつの0d 0aはありませんでした。 ダンプからすると変なコード等は一切はいっていないのですが、 もう一度、作成しなおしてみたら動いてしまいました。 正常に動いたファイルのダンプと全く同じなのですが??? これ以上は初心者なのでギブアップです。 色々とアドバイス頂き有難う御座いました。

関連するQ&A

  • fgetsで2行目から文字化け

    fgetsでファイルを一行ずつ読み込みたいのですが、二行目以降が文字化けしてしまいます。 ******* ソース ******* #include <windows.h> #include <stdio.h> FILE *fp; if ((fp = fopen("textlist.txt", "r")) == NULL){ MessageBox(NULL, TEXT("ファイルを開けません"), NULL, NULL); exit (1); } while (1) { TCHAR buf[128] = {0}; if (fgets(buf, sizeof(buf), fp) == NULL) break; MessageBox(NULL,buf,NULL,NULL); } fclose(fp); ***** textlist.txt ***** あいうえお かきくけこ さしすせそ メッセージボックスの一回目は正しく"あいうえお"と表示されますが、二回目・三回目は文字化けしています。 最終的に一行ずつ分けて配列に入れたいので、fgetsで出来たらと思っています。 よろしくお願いします。

  • fgetsのエラー

    C言語でテキストファイルをfgetsで読み込み、for文でfgetsを繰り返しているのですが、テキストファイルの15003行目でfgetsのエラーが出てしまい、止まってしまいます。 20000行まで読み込みたいのですが出来ません。 繰り返しが悪いのかと思い、for文を(i=0;i<10000;i++)と(i=10000;i<20000;i++)で分けても読み込んでも同じ結果でした。 テキストファイルが13880行までの場合はうまくいきました。 ↓Cプログラム↓ FILE *fpo; char line[4096]; for (i=0; i<20000; i++) { if (fgets(line, sizeof(line), fpo) == NULL) return(0); sscanf(line, "%d %lf %lf %lf %lf %lf %lf", &typep[i], &x[0][i], &x[1][i], &v[0][i], &v[1][i],&p[i], &n[i]);    //lineのデータを1つ1つ読み込む } ↓エラー文↓ Debug Assertion Failed! File: f:\dd\vctools\crt_bld\self_x86\crt\src\fgets.c Line:57 Expression:(str!=NULL) なにが原因なのか分かりません。 よろしくお願いします。

  • 文章から改行を削除して表示する

    #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) { FILE *fp; char row[124]; int c; if( (fp=fopen(argv[1],"r")) == NULL){ fprintf(stderr,"eror\n"); exit(1); }else{ while(fgets( row , sizeof(row) , fp)!=NULL){ printf("%s",row); } fclose (fp); } } というコードでtex.txtという文章ファイルから改行を削除した結果を表示したかったのですが、結果としてオリジナルとまったく同じ文が出てきます。fgetsで改行はふくまれないようにしたつもりなのですが、何故でしょう?解説お願いします。 text.txt: abcdefg hijklmn opqrstuvwxyz

  • fgetsの扱い方について

    今回、c++(言語はc言語)?で下のようなプログラムを書きました。 内容は、与えられたワイド文字列をマルチバイト文字列に変換した後、重要単語.txtに載っている単語が変換された文字列にあるか、を調べるものです。 ただ、実行できていないためプログラム自体があっているかわかりません。 これをvc++2010でエラーなくビルドしたあと、実行すると「ハンドルされていない例外が発生しました」とエラーが出ます。 使い方もよくわかってないブレークポイントを使って調べてみたところ、while(fgets(word,50,fp)!=NULL){ ここまで来るとエラーが発生してるみたいです。 なにが間違ってるんでしょうか? 解決策よろしくお願いします #include <stdio.h> #include <string.h> #include <locale.h> #include <stdlib.h> int main(){ setlocale( LC_ALL, "Japanese"); FILE *fp; fp=fopen("重要単語.txt", "w"); fclose(fp); if( (fp=fopen("重要単語.txt", "r")) ==NULL){ printf("File Not Open!!\n"); } wchar_t *input = L"音声認識を認識した後に変換を行う"; char str[200]; char word[50]; char iword[100]="●"; int pt=0,pp=0,cnt=0,i=0; //str=input;wchar_t→char変換する size_t wlen=0; wcstombs_s(&wlen,str,500,input,_TRUNCATE); while(fgets(word,50,fp)!=NULL){ strcat(word,'\0'); while(str[pt]!='\0'){ if(word[pp]=='\0'){ pp=0; strcat(iword,word); strcat(iword,"\n"); } else if(str[pt]==word[pp]){ pt++; pp++; } else{ pt=pt-pp+1; pp=0; } } pt=0; } fclose(fp); printf("変換後→%s\n",str); printf("重要単語\n%s",iword); return 0; } 重要単語.txtの中身 認識 音声 変換

  • 同一ファイルからの文字列検索

    お世話になります。 今、ファイル処理を勉強しています。 hoge.txtに文字列が格納されています。 (hoge.txt) --------------------- suzuki yamada kimura tanaka ito suzuki kimura --------------------- hoge.txtの上の行より、下に検索を行い、 一致した場合、printf("HIT\n");と出力します。 動きは、 suzukiを検索文字列し、yamada~kimuraまで検索を行い、 もしヒットした場合、出力表示します。 suzukiが検索終了すると、次のyamadaを検索文字列として、 kimura~kimuraを検索します。 この動作を最後の行まで行えば終了です。 下記のfgets()で1行分を取得してからの 次の行への移行がわかりません。 FILE *fp; char name[256]; if( (fp =fopen( "hoge.txt", "r )) == NULL ){ return 0; } while( fgets(name, sizeof(name), fp ) != NULL ){ //ここで次の行以下とstrstr()で比較を行う } お手数をお掛けしますが、よろしくお願い致します。

  • fgetsでエラー

     C言語を勉強しているものです。 fgetsやfscanfで第一引数にダブルポインタ変数を用いるとエラーが出ます。 なぜそうなるんでしょうか? ダブルポインタだと不可能なんでしょうか? char **moji; FILE *fp; moji = (char**)malloc(sizeof(char*) * 128 * 256); fp = fopen("test.txt","r+"); fgets(moji[0], 26, fp); //ここでエラー mojiを[0]で指定してあげてもエラーなんでしょうか? fgetsだけでなくfscanfでもそうです。 どうしてそうなんるんでしょう?

  • fgetsの処理を詳しく説明してください、お願いします。

    char line[100]; (stream = fopen( "test.c", "r" )) == NULL; while( ( fgets( line, 100, stream ) != NULL)){ printf( "%s", line); } fclose( stream ); 上記のコードでファイルが一行ずつ表示されるのですがなんとなくでfgetsを使っていたのでwhile文中のfgetsの動きがよく分かりません。 初めに改行文字までの一行を読み込むのはわかるのですが、何故繰り返すときlineに2行目、3行目、・・・ と取り込むのかがわかりません。 よろしくお願いします。

  • fgetsの使い方について

    こんばんわ。phpでラジオボタンを使用して投票フォームを作っています。 投票した値をログファイルに書き込んで4項目をカウントできるように格納したいのですが、エラーも出ずにスルーして原因がわからず困っています。 イメージでは ログファイル↓ 24 もちろん 11 するかも 5  わからない 12 ない 問題のソースは以下の通りです。 $write = "$radiobutton"."\n"; $fp = fopen("../php/test1.txt","a+"); $line1=fgets($fp); $line2=fgets($fp); $line3=fgets($fp); $line4=fgets($fp); fputs($fp,$write); fclose($fp); print "fgets1回目=".$line1."<br>\n"; print "fgets2回目=".$line2."<br><br>\n"; print "fgets3回目=".$line3."<br><br><br>\n"; print "fgets4回目=".$line4."<br><br><br><br>\n"; わかる方いましたらご教授お願いします。

    • ベストアンサー
    • PHP
  • fgetsに関して

    こんにちは。 最近C言語について学び始めた者なのですが、 while(fgets(pdb,100,fpr)!= NULL) { fprintf (fpw,"%s",pdb); } のように、一行あたりの文字数が50~70程度のテキストファイルを 読み込み別のファイルに移そうとしても何故か偶数行しか読み込んでくれません。 原因として考えられるのはどのようなことでしょうか? 御教示願います。

  • ファイルを読み込んで条件式を満たさない

    ファイルを読み込んで一部の文字列が来たら別のファイルの文字列を書き込んでもらうプログラムを作ろうとしたのですが、何故かifを使って条件分岐を試みたところ分岐してくれません。 どのようにしたら分岐しますか? 出来ればソースもお願いします。 ---ソースの内容--- #include <stdio.h> #include <string.h> void main(void){ FILE *fp,*fp2; char buf[100],buf2[100]; fp=fopen("yasa.txt","r+"); while( fgets( buf, 100, fp ) != NULL ){ if(strcmp(buf,"じゃがいも")==0){ fp2=fopen("kuda.txt","r+"); while( fgets( buf2, 100, fp2 ) != NULL ){ printf("%s",buf2); } fclose(fp2); } else{ printf("%s",buf); } } fclose(fp); } ---ソースここまで--- ---yasa.txtの内容--- きゃべつ にんじん じゃがいも だいこん セロリ ---yasa.txtここまで--- ---kuda.txtの内容--- もも オレンジ みかん ぶどう ---kuda.txtここまで---