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; }
以下の理由により、あまり良い実装ではないと思う。
- 戻り値は確保した領域へのポインタにして欲しい
- エラーが発生した場合はstrpにNULLをセットして欲しい*1