Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用带有固定宽度整型变量的printf宽度说明符_C_Printf_Posix_Int32 - Fatal编程技术网

C 使用带有固定宽度整型变量的printf宽度说明符

C 使用带有固定宽度整型变量的printf宽度说明符,c,printf,posix,int32,C,Printf,Posix,Int32,w是指定输出宽度的参数,p是数字,应以八进制打印 这两个变量都应该是固定宽度的整数(uint32_t)(这是我的编程类的任务)。 我在谷歌上搜索到,我可以使用宏PRIo32(inttypes.h)以八进制打印int32_t,但我找不到任何用于宽度说明符的宏。 因此,当我尝试: printf("%*" PRIo32 "\n", w, p); 我在测试系统中发现了这个错误 错误:字段宽度说明符“*”需要类型为“int”的参数,但参数2的类型为“int32\u t”[-Werror=format=]

w是指定输出宽度的参数,p是数字,应以八进制打印 这两个变量都应该是固定宽度的整数(uint32_t)(这是我的编程类的任务)。 我在谷歌上搜索到,我可以使用宏PRIo32(inttypes.h)以八进制打印int32_t,但我找不到任何用于宽度说明符的宏。 因此,当我尝试:

printf("%*" PRIo32 "\n", w, p);
我在测试系统中发现了这个错误

错误:字段宽度说明符“*”需要类型为“int”的参数,但参数2的类型为“int32\u t”[-Werror=format=]


有解决这个问题的宏吗?或者我应该试试别的?

uint32\u t
宽度转换为
int

如有必要,检测极端情况

assert(w <= INT_MAX);
printf("%*" PRIo32 "\n", (int) w, p);

uint32\u t
宽度强制转换为
int

如有必要,检测极端情况

assert(w <= INT_MAX);
printf("%*" PRIo32 "\n", (int) w, p);

我想这很清楚
*
要求
int
,而
w
int32\t
。您应该提供
int
参数。您可以将
w
转换为
int
。但我必须使用
int32\t
。该任务特别指出,禁止支持int为4字节,而使用
int
的解决方案因其自身矛盾而被拒绝。您必须将
int
传递到
printf
以指定宽度说明符。
*
修饰符始终需要type
int
。总是。因此,如果您有
w
,您知道它是
int32\u t
,并且您将其转换为
(int)
,那么您就不会假设机器上的
int
大小。您假设机器上的
int
大小与机器上的
int
大小相同,这与您使用
*
修饰符时所做的
printf
假设完全相同,因此您是金色的。(如果您机器上的
int
小于
int32_t
,如果
w
大于32767,您就有问题了,但是没有人打印那么宽的字段,所以您应该没问题。)我认为这很清楚
*
要求
int
,而
w
int32\t
。您应该提供
int
参数。您可以将
w
转换为
int
。但我必须使用
int32\t
。该任务特别指出,禁止支持int为4字节,而使用
int
的解决方案因其自身矛盾而被拒绝。您必须将
int
传递到
printf
以指定宽度说明符。
*
修饰符始终需要type
int
。总是。因此,如果您有
w
,您知道它是
int32\u t
,并且您将其转换为
(int)
,那么您就不会假设机器上的
int
大小。您假设机器上的
int
大小与机器上的
int
大小相同,这与您使用
*
修饰符时所做的
printf
假设完全相同,因此您是金色的。(如果机器上的
int
小于
int32_t
,并且
w
大于32767,则您有问题,但没有人打印那么宽的字段,因此您应该可以。)
uint32_t w2 = w;
while (w2 > 100) {
  w2--;
  putchar(' ');
}
printf("%*" PRIo32 "\n", (int) w2, p);