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