[PR]

『新妻LOVELY×CATION』を応援しています!

ファイルに文字列単位の入出力操作を行う

戻る

 ファイルに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


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
『新妻LOVELY×CATION』を応援しています!