HIR-NET Home 運営者 オンラインソフト 運営者著書 CG HIR-NETリンク集
Tweet このエントリーをはてなブックマークに追加
C言語辞典

fprintfエフ・プリント・エフ関数かんすう
fprintf function

語源  fileファイオ printプリント formatーマッツ(ファイル書式印字)
分類  C/C++標準ライブラリ/関数/入出力関数/出力関数/書式出力関数
名称  ファイル書式出力関数(file format output function)
対義  fscanf関数
同等  fwprintf関数
類似  vfprintf関数
関連  printf関数, sprintf関数
解説  fprintf関数は、数値を書式変換しファイルに書き出す関数です。出力書式文字列 *format… の制御のもとに続く実引数を変換し、ストリーム *stream に出力します。stdout の代わりに *stream に出力する printf関数と等価です。

関数原型宣言ヘッダ  <stdio.h>
関数原型宣言例
0以上:転送バイト数
負   :エラー       出力ストリーム
↑                   ↓
int fprintf(FILE *stream,
const char *format,...);
              ↑   ↑
  出力書式文字列   可変個引数
関数返却値
①転送されたバイト数を返します。
②出力エラーが発生した場合は負の値を返します。

注意1  書式に対し十分な実引数がない場合の動作は未定義です。実引数が残っている間に書式が尽きてしまう場合は余分の実引数は通常の評価はされるが出力には関係しません。
注意2  変換によって生成される最大の文字数の最低値は509バイト以上です。
落とし穴1  fputs関数を fprintf関数に置き換えるのは避けるべきです。なぜなら fputs関数の文字列は無変換で出力されますが、fprintf関数の書式文字列は % が特別な意味を持つからです。これは puts関数を printf関数に置き換えた場合も同様ですが、fputs関数の場合は文字列が、文字列リテラルではない場合が多く、バグに気付くのが遅れます。次の 3つの違いに注意してください。
  fputs("%%",sput);        …… %を2つ出力
  fprintf(sput,"%%");      …… %を1つ出力
  fprintf(sput,"%s","%%"); …… %を2つ出力
関数定義例
// fprintf.c

#include <stdio.h> // FILE,vfprintf
#include <stdarg.h> // va_list,va_start,
//  va_end


int fprintf( // ファイル書式出力関数
//  File print Format
// 0以上:転送バイト数
// 負:失敗
FILE       *stream, // 出力ストリーム
const char *format, // 出力書式文字列
               ...) // 可変個引数
{
  int r;

  va_list args;  // 作業用変数の定義
  va_start(args,format);   // 初期化
  r=vfprintf(stream,format,args);
  va_end(args);  // 終了
  return r;
} // fprintf


 プログラム例   

書式に従ってファイルに出力
// fprintf1.c

#include <stdio.h> // FILE,fopen,fprintf
#include <stdlib.h> // EXIT_SUCCESS


int main(void)
{
  FILE *sput=fopen("ファイル名","w");

  int i,j=0;

  for(i=0;i<10;i++)
  {
    fprintf(sput,"%d:%d\n",i,j);
    j+=i;
  } // for

  return EXIT_SUCCESS;
} // main
実行結果
>>fprintf1⏎

>>type ファイル名⏎  …… 書き出されたファイル
0:0                       の内容を調べる
1:0
2:1
3:3
4:6
5:10
6:15
7:21
8:28
9:36

>>■





HIR-NET Home 運営者 オンラインソフト 運営者著書 CG HIR-NETリンク集
◆リンクは、ご自由にお張りください。

Copyright © 1988-2017 Hirabayashi Masahide  プライバシーポリシー