gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
>>673, >>680共上記の環境では意図通りに動くよ。

これ、あーげる。

#include <stdarg.h>
#include <stdio.h>

int length_snprintf(const char *fmt, ...)
{
va_list arg;
int ret = 0;

va_start(arg, fmt);
ret = vsnprintf(NULL, 0, fmt, arg);
va_end(arg);

return ret;
}

int main(void)
{
char ss[1];
int ret, l;

l = snprintf(NULL, 0, "%d", -1 * 1000000);
fprintf(stdout, "l = %d\n", l);
l = length_snprintf("%d", -1 * 1000000);
fprintf(stdout, "l = %d\n", l);
return 0;
}