ILD

snprintf size参数为负数怎么处理
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2024-3-9 站点:Inside Linux Development

看如下代码,如果传一个负数,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。因此调用的时候后续做好判断。


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.