首页 > 解决方案 > printf() 精度

问题描述

char buf[10];
int counter, x = 0;
snprintf (buf, sizeof buf , "%.100d%n", x, &counter); 
printf("Counter: %d\n", counter)

我正在学习 printf 的精度。使用 %.100d%n,这里的精度给出了 100 位来渲染 x。

我不明白的是为什么计数器会增加到 100,尽管实际上只有 10 个字符被写入缓冲区?

标签: cprintfformat-string

解决方案


写入的十个字节buf是 9 个空格和 1 '\0'(零终止符),counter分配了10099 个空格和 1 '0'(数字零)的值。

   buf <== "         "
%.100d <== "          .....   0"

请注意,这buf是不完整的:它没有'0'.


推荐阅读