【发布时间】:2020-02-05 19:12:54
【问题描述】:
w是指定输出宽度的参数,p是数字,应该以八进制打印 这两个变量都应该是固定宽度的整数(uint32_t)(这是我的编程课的任务)。 我用谷歌搜索,我可以使用宏 PRIo32 (inttypes.h) 以八进制打印 int32_t,但我找不到任何宽度说明符的宏。 所以当我尝试时:
printf("%*" PRIo32 "\n", w, p);
我在测试系统中收到此错误
错误:字段宽度说明符“*”需要“int”类型的参数,但参数 2 的类型为“int32_t”[-Werror=format=]
有没有解决这个问题的宏?还是我应该试试别的?
【问题讨论】:
-
我认为这很清楚。
*期望int,但w是int32_t。您应该提供int参数。您可以将w转换为int。 -
但我必须使用
int32_t。该任务明确表示禁止假设 int 为 4 个字节,使用int的解决方案被简单地拒绝 -
那么它就自相矛盾了。您必须将
int传递给printf以指定宽度说明符。 -
*修饰符总是需要int类型。总是。所以如果你有w,你知道它是int32_t,并且你把它转换成(int),你就不会在你的机器上假设int的大小。你假设你机器上int的大小与你机器上int的大小相同,这与你使用*修饰符时printf所做的假设完全相同,所以你'重金。 (如果int在您的机器上小于 小于int32_t,并且如果w大于32767,那么您就有问题了,但是没有人打印那么宽的字段,所以您应该没问题。 )