看如下代码,如果传一个负数,snprintf是不是就不打印了。
char buf[4] = {0};
int ret = snprintf(buf, -1, "abc");
printf("ret %d %s\n", ret, buf);
编译告警了:
test.c:20:12: warning: specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wformat-truncation=]
20 | int ret = snprintf(buf, -1, "abc");
执行结果为:
ret 3 abc
其实size参数的类型是size_t,如下:
int snprintf(char *str, size_t size, const char *format, ...);
它是一个无符号数,所以负数转成一个极大的正数,没法传负数给snprintf。因此调用的时候后续做好判断。