Provided by: manpages-ja-dev_0.5.0.0.20060115-1_all bug

glibc意
       glibc      では変換指定にいくつか拡張を行っている       (これらの拡張は
       POSIX.1-2001                                   には規定されていないが、
       他のいくつかのシステムで同様の機能が提供されている)。                 %
       文字と変換指定文字の間に、オプションとして   flag   とフィールドの   _
       を指定でい (これらを指定する場合には E や O 修飾子の前に置く)。

       以下のフラグ文字が使用でい:

       _      (下線)    数値の結果文字列のパディング    (穴埋め)    をスペース
              (空白文字) で行う。

       -      (ダッシュ) 数値の結果文字列に対するパディングを行わない。

       0      変換指定文字がデフォルトではスペースでパディングを行う場合でも、
              数値の結果文字列へのパディングを 0 で行う。

       ^      結果文字列中のアルファベット文字を大文字に変換する。

       #      結果文字列の大文字・小文字を入れ替える
              (このフラグは特定の変換指定文字でしか機能しない。その中でも
              本当に様僂覆里 %Z の場合だけである)。

       オプションの10進数の幅指定子はフラグの後ろに置くことがでい
       (フラグはなくてもよい)。フィールドの本来の大い気指定された幅よりも
       小さい場合、結果文字列の左側は指定された幅までパディングされる。

グ
       gcc         のいくつかのバージョンにはおかしなところがあり、         %c
       の使用法について以下のような警告を出す:  warning: `%c' yields only last
       2       digits       of       year        in        some        locales
       (_`%c'は年の下2桁しか出力しない)_
       もちろんプログラマが    %c     を使うのはお薦めでい襪海箸任△襦     %c
       を使うと適切な日付と時刻の表気鯑世襪海箸でい襪らである。          gcc
       のこの問題を回避しようとすると、何かすっい蠅靴覆さなになるだろう。
       比較的い譴い焚魴菠法は以下のような中間関数を追加することである。
              size_t  my_strftime(char  *s, size_t max, const char *fmt, const
              struct tm *tm) {
                        return strftime(s, max, fmt, tm);
              }

例
       以下のプログラムを使うと strftime() の実験がでい襦

       #include <time.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
           char outstr[200];
           time_t t;
           struct tm *tmp;

           t = time(NULL);
           tmp = localtime(&t);
           if (tmp == NULL) {
               perror("localtime");
               exit(EXIT_FAILURE);
           }

           if (strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) {
               fprintf(stderr, "strftime returned 0");
               exit(EXIT_FAILURE);
           }

           printf("Result string is \"%s\"\n", outstr);
           exit(EXIT_SUCCESS);
       } /* main */

       以下に、 strftime() の glibc 実装が生成する結果の例をいくつか示す:

       $ ./a.out "%m"
       Result string is "11"
       $ ./a.out "%5m"
       Result string is "00011"
       $ ./a.out "%_5m"
       Result string is "   11"

目
       date(1), time(2), ctime(3), setlocale(3), sprintf(3), strptime(3)