解码C语言中的printf语句(Printf Primer)
我正在努力将1998年到21世纪的一些旧代码引入。该过程的第一步之一是将printf语句转换为QString变量。无论我回头看一下printf多少次,我总是最终忘记一件事情或者另一件事。因此,为了好玩,让我们一起解码一下,以免遇到麻烦,并在此过程中为Stackoverflow创建第一个小" printf入门"。
在代码中,我遇到了这个小宝石,
printf("%4u\t%016.1f\t%04X\t%02X\t%1c\t%1c\t%4s", a, b, c, d, e, f, g);
如何格式化变量a,b,c,d,e,f,g?
解决方案
回答
一种。十进制,四位有效数字
b。没有把握
C。十六进制,至少4个字符
d。也为十六进制,至少2个字符
e。 1个字符
F。字符串,最少4个
回答
丹尼基本上是对的。
一种。无符号十进制,至少4个字符,带空格
b。浮点数,小数点后至少16位(填充0),小数点后1位
C。十六进制,最少4个字符,0填充,大写字母
d。与上述相同,但至少2个字符
e。假定e为整数,转换为无符号字符并打印
F。与e相同
G。这可能是拼写错误,这4个无效。如果它是"%.4s",则字符串中最多可以打印4个字符。有趣的是,在这种情况下,字符串不需要以null结尾。
编辑:jj33在上面的b和g中指出2个错误。
回答
@Jason Day,如果少于4个字符,我认为最后%4s中的4个有意义。如果多于4个,我们是正确的,%4s和%s相同,但是在g中少于4个字符的情况下,%s将被对齐,而%4s将在4个字符的字段中右对齐。
b实际上是整个字段的最少16个字符,包括小数和我认为的小数点后的一位数字(16个总字符vs 18个总字符)
回答
@ jj33,在这两个方面,你都是绝对正确的。
#include <stdio.h> int main(int argc, char *argv[]) { char *s = "Hello, World"; char *s2 = "he"; printf("4s: '%4s'\n", s); printf(".4s: '%.4s'\n", s); printf("4s2: '%4s'\n", s2); printf(".4s2: '%.4s'\n", s2); return 0; } $ gcc -o foo foo.c $ ./foo 4s: 'Hello, World' .4s: 'Hell' 4s2: ' he' .4s2: 'he'
接得好!
回答
这是我的printf入门:
http://www.pixelbeat.org/programming/gcc/format_specs.html
我总是用gcc用-Wall编译
会警告提供的任何不匹配
printf格式和变量。
回答
我们真正需要的是一个在printf()语句中使用格式字符串并将其转换为等效的基于QString的函数调用的工具。
是否有人愿意花费他的免费软件捐赠时间来开发这种工具?
自由软件托管服务的URL的占位符,其中包含该工具的源代码