Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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 警告:';0';以精度和‘;%忽略标志i’;gnu_printf格式_C_Gcc_Ubuntu - Fatal编程技术网

C 警告:';0';以精度和‘;%忽略标志i’;gnu_printf格式

C 警告:';0';以精度和‘;%忽略标志i’;gnu_printf格式,c,gcc,ubuntu,C,Gcc,Ubuntu,在UbuntuKarmic上使用GCC4.4.1编译一些遗留C代码时,我收到了以下警告 警告是: src/filename.c:385:警告:“0”标志 以精确和“%i”忽略 gnu_printf格式 导致发出警告的代码段是: char buffer[256] ; long fnum ; /* some initialization code here ... */ sprintf(buffer, "F%03.3i.DTA", (int)fnum); /* <-

在UbuntuKarmic上使用GCC4.4.1编译一些遗留C代码时,我收到了以下警告

警告是:

src/filename.c:385:警告:“0”标志 以精确和“%i”忽略 gnu_printf格式

导致发出警告的代码段是:

 char     buffer[256] ;
 long     fnum ;
 /* some initialization code here ... */
 sprintf(buffer, "F%03.3i.DTA", (int)fnum);  /* <- warning emitted here */
char缓冲区[256];
长fnum;
/*这里有一些初始化代码*/
sprintf(缓冲区,“F%03.3i.DTA”,(int)fnum);/* 从
printf(3)
手册页:

   0      The value should be zero padded.  For d, i, o, u, x, X, a, A, e,
          E,  f, F, g, and G conversions, the converted value is padded on
          the left with zeros rather than blanks.  If the 0  and  -  flags
          both  appear,  the  0  flag is ignored.  If a precision is given
          with a numeric conversion (d, i, o, u, x, and X), the 0 flag  is
          ignored.  For other conversions, the behavior is undefined.

因此,您可以使用零填充或最小位数,但不能同时使用两者。

您的理解是什么?解决此问题的正确方法显然是删除零。我的理解是,数据类型和格式说明符之间存在不兼容(这很可能是因为试图用精度格式化整数值)。不,整数值说明符的精度是有效的。如手册页所述,它用于给出用于格式化的最小位数。您不能只使用printf(“%0*d”,3,(int)fnum)?对不起,但是。。。如果我们不独立于值的长度来表示字段的长度,我们如何用零填充?@sylvanulg:指定精度会导致
printf()
0
填充该长度。只需确保精度大于或等于字段宽度。