MacOSXでのsnprintf挙動への追記
参考:http://d.hatena.ne.jp/kt-blackout/20040622#p1
上記の日記でMacOSXの[v]snprintfの最初の二つの引数にNULL, 0を与えると-1を返すと書いたが、これはMacOSX 10.2での話。最近MacOSX 10.3にしたのだが、こちらでは[v]snpritnfはメモリが足りなくても、「メモリが足りれば書き込まれたであろう値」を返すようになった。つまり以下のコードでは"len : 2"と表示される。
#includeint main(int argc, char *argv[]) { int len; len = snprintf(NULL, 0, "OK"); printf("len : %d?n", len); return 0; }
いま、このコードでlenが-1になる環境はどんなのがあるんだろう? いまのところMacOSX 10.2しか見当たらない*1。これに依存するのはありなのか、なしなのか。
*1:sourceforgeのコンパイルファームでも実験した