ファイルに1文字列を書き出す関数を作る。 //********************************************************* // ファイルに文字列と文字列の終了を示す空文字を書き出す関数。 //********************************************************* int fputsz ( char *Buf, FILE *fp ) { if ( fp == stdout ) { // 標準出力については関数fputs() を使用する return (fputs(Buf,fp)!=EOF); } else { // 文字列と文字列の終了を示す空文字を書き出す return ((EOF != fputs(Buf,fp)) && (EOF != fputc('\0',fp))); } }//fputsz ファイルから1文字列を読み込む関数を作る。 //********************************************************* // ファイルから1文字列(ファイル終端か空文字('\0')まで)を読み込む関数。 // 読み込まれた文字列は空文字で終了する。 // ファイル終端で文字列が読み込まれなかった場合は偽を、さもなくば真を返す。 //********************************************************* int fgetsz ( char *Buf, int BufSize, FILE *fp ) { int i, c; // 標準入力については関数fgets() を使用する if ( stdin == fp ) { return (int)fgets( Buf, BufSize, fp ); } // 最大で 指定されたバッファサイズ-1 まで読み込む for( i = 0; i < BufSize-1; ++i ) { // fp から1文字を読み込む c = fgetc( fp ); // 読み込んだ文字をバッファに書き込む。 // ただし EOF であれば空文字を書き込む。 Buf[i] = ((c==EOF)?'\0':c); if ( Buf[i] == '\0' ) { // 読み込んだ文字列長が0で最後の読み込みがEOFであれば偽を // さもなくば真を返す return !((i==0)&&(c==EOF)); } } // 指定されたバッファサイズ-1 の間に空文字もEOFもない場合 { // fp から1文字を読み込む c = fgetc( fp ); // 読み込まれた文字が空文字でもEOFでもない場合 if ((c!=EOF)&&(c!='\0')) { // 読み込んだ文字を fp に戻す。 ungetc( c, fp ); } // 文字列の終了を示す空文字を書き込む Buf[i] = '\0'; } // 真を返す return 1; }//fgetsz |
|