编译以下内容时:
printf("%*s",lengths[i],row[i]);
我收到了这个警告:
4.0.c:407: warning: field width should have type ‘int’, but argument 2 has type
‘long unsigned int’
长度声明为:unsigned long *lengths;
。
我试图解决问题,但无济于事。 添加这个,
printf("%*lu",(unsigned long)lengths[i],row[i]);
我没有收到任何警告,但代码无法正常工作。
谢谢维拉
答案 0 :(得分:8)
将其投放到int
:
printf("%*s", (int) lengths[i], row[i]);
答案 1 :(得分:2)
这是打印它的正确方法:
printf("%*s", (int) lengths[i], row[i]);
根据http://en.wikipedia.org/wiki/Printf#Format_placeholders:
* - 使
printf
填充输出,直到它是n个字符宽,其中n是存储在前面的函数参数中的整数值由修改类型表示的。例如printf("%*d", 5, 10)
将导致打印“10”,宽度为5。
因此,除非lengths
用于其他需要unsigned long
的其他内容,否则我建议将其转换为int *lengths
。
答案 2 :(得分:2)
确保该值不大于INT_MAX
并将其转换为int
以同意printf
转换说明符中的星号
printf("%*s", (int)lengths[i], row[i]);
见C99 Standard中的7.19.6.1/5:
... int 参数提供字段宽度或精度......
答案 3 :(得分:0)
像这样使用...... printf("%*ul", (int) lengths[i], row[i]);
答案 4 :(得分:0)
为了确保我了解您要执行的操作,您希望将row[i]
打印为字段宽度由lengths[i]
指定的字符串?
如果是这种情况,您需要将lengths[i]
的值转换为int
:
printf("%*s", (int) lengths[i], row[i]);
如果不您正在尝试做什么,那么您需要使用更多信息更新您的问题。