我正在带来的某些旧的代码自1998年达到21世纪。第一个步骤的过程是变换printf发言 字符串 变量。无论多少次我回头看printf虽然,最后我总是忘了一件事或其他。因此,为了好玩,让我们解它在一起,对奥'时间的缘故,并在该过程中创建的第一点点 '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被格式化?

有帮助吗?

解决方案

丹尼是主要的权利。

a.unsigned decimal,最低4个字符,空间的软垫
b.浮点,最低的16位之前的十进制(0填充),1个位小数点后
c.六、最低4个字符,0填补,信件被印在上情况
d。同上,但至少2个字符
e.e假设是一个整数,转换成unsigned char和印刷
f.同样子
g。这可能是一个错误,4没有任何影响。如果它是"%.4",那么最大的4个字符串将打印。有趣的是注意到,在这种情况下,不需要空终止。

编辑: jj33 分2中的错误b和g以上 在这里,.

其他提示

@杰森一天, 我认为4在最后%4s是重要的,如果有少于4个字符。如果有超过4你是对的,%4s和%s将是相同的,但少于4个字符g%s将留的理由和%4s会是正确的-有道理的4个字符的领域。

b实际上是最低的16个字符的整个领域,包括小数和单位小数点后,我认为(16总chars vs18总chars)

这是我的printf底漆:http://www.pixelbeat.org/programming/gcc/format_specs.html

我总是汇编有墙与其海湾合作委员会 将提醒有关的任之间的不匹配的供给 printf格式和变量。

@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'

好的抓!

a.小,四位有效数字

b.不确定

c.六、最低4个字符

d。还hex,最小的2个字符

e.1字

f.字符串的,最低4

你真正需要的是一个工具,它需要的格式串printf()报表并将它们转换成等同的字符串基于功能的电话。
任何人都不会想花他的免费软件的捐款的时间在发展这样的工具?

占位于URL免费软件托管服务保持的源代码这样的工具

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top