asprintf()

asprintf()は、sprintf()に似ているが、出力文字列を (終端の NULL バイトも含めて) 保持するのに十分な大きさのメモリを確保し、最初の引数にその文字列へのポインタを返す。成功すると、出力されたバイト数を返す。メモリの割り当てができなかったり、その他エラーが生じると、これらの関数は -1 を返し、strp の内容は未定義となる。


使用例

#define _GNU_SOURCE
#include 
#include 

int
main(void)
{
     int   res;
     char *strp;

     asprintf(&strp, "Hello, world!\n");
     if (res == -1)
          return 0;

     printf("%s", strp);
     free(strp);
     strp = NULL;

     return 0;

}


以下の理由により、あまり良い実装ではないと思う。

  1. 戻り値は確保した領域へのポインタにして欲しい
  2. エラーが発生した場合はstrpにNULLをセットして欲しい*1

*1:FreeBSDではNULLをセットする