2. C言語 - 標準ライブラリ - stdio.h

 
2.1 perror
2.2 printf
(1) 主なフラグ文字
(2) 主な長さ修飾子

2.1 perror

 perror はシステムのエラーメッセージを標準出力へ出力する、一番原始的な関数です。

void perror(const char *string);
 例えば以下のようなソースを書いて

#include <errno.h>
#include <stdio.h>
#include <string.h>

int main()
{
    FILE *file;

    if ((file = fopen("aaa.txt", "r")) == NULL)
    {
        perror("fopen");
        return errno;
    }

    fclose(file);

    return 0;
}
 ファイル aaa.txt が存在しない状態で実行した場合、以下のように表示されます。

> ./a.out
fopen: No such file or directory
 前半の「fopen:」は perror へ渡した文字列の末尾に :(コロン)をつけたものです。  引数が ""(NULL 文字列)の場合、コロンも含めて表示されず、エラーメッセージのみとなります。  最も原始的というのは、標準出力へただ出力するだけなので、文字列として編集して出力するには「string.h」にある、strerror や strerror_r を使用します。

2.2 printf


int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
 printf は標準出力への出力。  fprintf は stream で示すファイルポインタへの出力。  sprintf は str で示す、メモリへの出力。  snprintf は str で示す、size バイトのメモリへの出力。sprintf は、バッファオーバーランの問題がありますので、snprintf が推奨されます。  C言語の覚え初めに、最も使う関数かもしれません。  書式は以下の形式になります。派生する関数や言語でもほぼ同様の書式が使用されます。

%[フラグ文字][フィールド幅][精度][長さ修飾子][変換指定子]

(1) 主なフラグ文字

文字 意味
# o 変換の場合、先頭に 0 をおく。 x または X 変換の場合、先頭に 0x をおく。 a, A, e, E, f, F, g, G の場合、小数点に続く数字がない場合も小数点をおく(通常は、小数点の後に数字が続く場合にのみ、 小数点が表示される)。 g または G 変換の場合、末尾のゼロが変換結果から削除されない。
0 0 パディングする。
- 左揃えにする。
' ' 正の数字の前に空白スペースをおく。
+ 正の数字の前に + をおく。
' i, d, u, f, F, g, G の前に、ロケールに指定があれば、1000単位の区切り文字を出力する。
I i, d, u の場合、ロケールの代替出力数字があれば、それを出力する。

(2) 主な長さ修飾子

修飾子 意味
hh singed char か unsigned char
h short int か unsigned short int
l long int か unsigned long int
ll long long int か unsigned long long int
L long double