• ベストアンサー

fgetsの用法について

maiton3の回答

  • maiton3
  • ベストアンサー率6% (4/58)
回答No.1

大きくてもいいと思います。 なぜ255なのかあなたがプログラマなら 自分で考えてみるほうがいいですよ。 すごく簡単なことですから。

関連するQ&A

  • 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で読み込んだ値のvector処理

    Visual C++ 2008でc++プログラミングの勉強をしています。 ファイルから文字列をfgetsで読み込み、vectorにいれる処理をプログラミングしようとしているのですが、うまくいきません。 input.txt------------------ sumday monday tuesday ------------------------- このような入力ファイルをfgetsで読み込み、各行を文字列としてvectorにpush_backし、 読み込みが終わった後にvectorの全要素をループで出力するというシンプルなものなのですが、以下のようにコーディングしました。 #include <stdio.h> #include <stdlib.h> #include <vector> int main(void){ using namespace std; FILE *fp; fp = fopen("input.txt","r"); std::vector<char *> my_vector; char buff[16]; while(fgets(buff, 256, fp) != NULL) { char copy_of_buff[16]; std::strcpy(copy_of_buff, buff); my_vector.push_back(copy_of_buff); printf("output from fgets..... %s \n", copy_of_buff); } vector<char *>::iterator it = my_vector.begin(); // while( it != my_vector.end() ) // { printf("output from vector.... %s \n", *it); ++it; // } fclose(fp); return 0; } 以下のような出力がなされるものと思っていたのですが、 outputs from fgets .... sunday outputs from fgets .... monday outputs from fgets .... tuesday output from vector .... sunday output from vector .... monday output from vector .... tuesday 実際は以下のように、vectorからの出力分がすべて最後にpush_backした"tuesday"となりました。 outputs from fgets .... sunday outputs from fgets .... monday outputs from fgets .... tuesday output from vector .... tuesday output from vector .... tuesday output from vector .... tuesday fgetsしたあとの処理が問題だと思うのですが、原因がよく分かりません。非常に基本的なことだと思うのですがwebで調べてもいまいちわかりません。 原因が分かる方、よろしくお願いします。

  • fgets( ) の返り値は何?

    fgets( ) はファイル終端に行くと0を返すらしいけど それ以外の場合は何を返すんですか? if( fgets( buf, 10, fp ) == 0 ) break; のように、fgets( ) の返り値をそのまま使うことはできたけど 試しに、 char ret[255]; ret = fgets(buf, 10, fp); とするとコンパイルエラーでした。

  • 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でもそうです。 どうしてそうなんるんでしょう?

  • C++初心者です。ご指導よろしくお願いします。

    C++初心者です。ご指導よろしくお願いします。 C++で特定の行の値を読み込むプログラムを作っています。 a.txtとb.txtが入力ファイルで、c.txtが出力ファイルです。 a.txtには 237891 193203 1355876 ・ ・ ・ (以下1~5000000の数値がランダムに15000行分) b.txtには 0.333333 0.333333 0.397396 ・ ・ ・ (以下0.333333~0.822222までの数値がランダムに5000000行分) が書いてあって、 c.txtに a.txtの1行目の数値の行に対応するb.txtの値 a.txtの2~ a.txtの3~ ・ ・ ・ (以下15000行分) を出力するプログラムを作りたいと思っています。 以下のように、プログラムを書きましたが、a.txtが10行、b.txtが20行程度の時は問題なく動くのですが、行数が多くなると急に動かなくなります。 charのところを変えたり、offsetのところを変えたりしたのですが、最初の1行を読み込んだところで止まってしまいます。 (buffの値は=237891 no2の値は=237891まで) どのようにすれば動くようになるでしょうか? ご指導よろしくお願いします。 #include <stdio.h> #include <iostream> #include <fstream> #include <cstdlib> #include <cstring> using namespace std; int main(void) { FILE *fp,*fp2,*fp3; char buff[256],buff2[256]; long int offset[100],offset2[100]; long int max,max2; long int no=0; long int no2=0; for(no=1; no<=15000; no++){ fp = fopen("input/a.txt","r"); if(fp == NULL){ cout << "入力ファイルをオープンできません\n"; } for ( max = 0 ; !feof(fp) ; max++ ){ if ( max >= 100 ){ break; } offset[ max ] = ftell( fp ); fgets( buff, sizeof(buff), fp ); } fseek( fp, offset[no - 1], SEEK_SET ); fgets( buff, sizeof(buff), fp ); cout << "buffの値は=" << buff << "\n"; no2 = atoi(buff); cout << "no2の値は=" << no2 << "\n"; fp2 = fopen("input/b.txt","r"); if(fp2 == NULL){ cout << "入力ファイルをオープンできません\n"; } for ( max2 = 0 ; !feof(fp2) ; max2++ ){ if ( max2 >= 100 ){ break; } offset2[ max2 ] = ftell( fp2 ); fgets( buff2, sizeof(buff2), fp2 ); } fseek( fp2, offset2[no2 - 1], SEEK_SET ); fgets( buff2, sizeof(buff2), fp2 ); cout << "buff2の値は=" << buff2 << "\n"; fp3 = fopen("input/c.txt","a"); if(fp2 == NULL){ cout << "入力ファイルをオープンできません\n"; } fprintf(fp3, buff2); strcpy(buff,"0"); strcpy(buff2,"0"); no2=0; cout << "buff2は初期化されて=" << buff2 << "\n"; fclose(fp); fclose(fp2); fclose(fp3); } }

  • fgetsについて質問です;;

    すいません質問です fgets(str,255,fp)で読み込んだ一行が、取り出せずdmy配列に入れることができません これは何故でしょうか? fp = fopen("aaa.dat","r"); for(ss;fgets(str,255,fp) != NULL;ss++ ){ dmy[ss] = str[ss]; printf("%s\n",str); } printf("%s\n",dmy[5]); fclose(fp); }

  • fgetsの使い方

    C言語を今日から始めたじいさんです。 宜しくお願い致します。 メモ帳を使って3行ほどの文字列を入力して、text.txtファイルに保存します。 この文字列を読み込んで、1行ずつ印刷しようとしていますが fgetsでtxtファイルの終了条件がわかりません。 while(fgets(row , sizeof( row ) , fp) != NULL){ printf("%s\n , row); } fclose( fp ); return 0; のようにしているのですが、3行印字処理をして異常終了してしまいます。 本に出ている例をそのまま実行しているのですが、うまくいきません。 txtファイルをダンプしてみると各行の後ろに0d 0aたぶんCR,LFが入っていてNULL=00(?)はありません。テキストファイルの作り方に問題があるのでしょうか? それともfgetsの使い方に誤りがあるのでしょうか?

  • fgetsとsscanfの使い方

    初歩的な質問で申し訳ないのですが、fgetsとsscanfの使い方が合っているか確認願います fgets(char *s , int n ,FILE *fp); -> fpから1行(nで指定した文字数)読み込み、sに格納する sscanf(char buf, "%s", char string); -> bufから%sを読み込み、stringに格納する まだ使い慣れていないのでどっちから読み込むのかこんがらがってます 上記の解釈でよろしいのでしょうか?

  • fgetsについて

    C言語初心者です。わからないことがありまして。 おしえてください。 以下はプログラムの一部です。 ################################ char fi[50]; int r; fgets( fi, 50, stdin ); r = atoi( fi ); ################################ fgets( fi, 50, stdin );のとこで 50とstdinはどういう意味ですか? 50は50バイト以上でなくてはいけません、という意味ですか? よろしくお願いします。

  • fgetsがうまくいきません。

    半角スペースとOで(O = 生存)ライフゲームを作ろうと思っていますが、 printf文で表示するとうまくいきません。 どうしたらよいでしょうか。回答お願いします。 #include<stdio.h> #include<stdlib.h> #define SIZE 20 int main(void) { int i = 0; char board[ SIZE ][ SIZE+1 ]; FILE *fp; if( ( fp = fopen( "life.dat", "r" ) ) == NULL ) { printf("ファイルが見つかりません。---life.dat\n"); exit(EXIT_FAILURE); } for(i = 0; i < SIZE; i++)//初期設定 { fgets( *(board + i) , SIZE+1, fp ); }//初期設定終わり for(i = 0; i < SIZE; i++) { printf("%s", *(board + i) ); } return 0; }