gpt4 book ai didi

c - 为什么在 printf 格式字符串中使用 %8.8 而不是 %08?

转载 作者:可可西里 更新时间:2023-11-01 18:42:18 24 4
gpt4 key购买 nike

刚刚遇到一些(非常)遗留代码(最初用 C 编写,但现在也编译为 C++)和使用宽度说明符对字符串进行零填充

void main()
{
unsigned long val = 2413;
printf("V1: %08lu \n", val);
printf("V2: %8.8lu \n", val);
}

结果是一样的

V1: 00002413
V2: 00002413

那么为什么要使用 V2?它是昔日标准库的某些遗留方面吗?

编译器详细信息:Microsoft (R) C/C++ 优化编译器版本 19.10.25019 for x86

最佳答案

对于unsigned 整数类型没有区别。对于 signed 整数类型的负值,您将看到不同的输出

long val = -2413;
printf("V1: %08ld\n", val);
printf("V2: %8.8ld\n", val);

V1: -0002413
V2: -00002413

%8.8ld.8 部分指定要出现的最小数字数- 符号不被视为数字。为此,要求第二个版本始终打印 8 位数字。如果该值为负数,- 符号将不得不成为打印的第 9 个字符,从而违反了请求的字段宽度 8。

%08ld 版本没有要求打印至少 8 位数字,这就是 - 符号在字段占用一个字符的原因宽度为 8,仅打印 7 位数字。

http://coliru.stacked-crooked.com/a/fc9022cc0ef3e097

关于c - 为什么在 printf 格式字符串中使用 %8.8 而不是 %08?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44555955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com