Printf格式字符串问题(PW.BAD_PRINTF_FORMAT_STRING)

时间:2019-04-12 06:10:39

标签: c printf

sprintf(xBuffer,"%l",rootCause)

rootCauseunsigned long

  

bad_printf_format_string:无效的格式字符串转换

sprintf(buffId,"Ox%lx Ox%lx Ox%lx", canSnifferMsg.nodeId, canSnifferMsg.index, canSnifferMsg.subindex);

这是什么? nodeIdindexsubindex都是long

1 个答案:

答案 0 :(得分:2)

无符号长整数的正确格式字符串为%lu
可以在here中找到格式说明符列表。
here也提出了类似的问题。

%lx用于获取数字的十六进制表示。因此,它是无符号的还是使用2的补码而不是负号都无关紧要。

如果要打印常规的长号,可以使用我发送的第一个链接上指定的%ld%li

示例:

unsigned long a = (unsigned long)(-25);
char buff[100];

sprintf(buff, "%lu %lx %ld", a, a, a);

printf("%s", buff);

输出:

  

4294967271 ffffffe7 -25