警告:比数据参数更多'%'转换[-Wformat] C ++

时间:2016-08-24 18:11:53

标签: c++

我有这段代码:

    fprintf( fitxer_sortida, "blob %d ->\t a=%7.0f\t p=%8.2f (%8.2f extern)\t pconvex=%8.2f\t ext=%.0f\t m=%7.2f\t c=%3.2f\t l=%8.2f\n",
                 i, area[i], perimetre[i], externPerimeter[i], perimetreConvex[i], exterior[i], compacitat[i], longitud[i] );

我收到错误:

warning: more '%' conversions than data arguments [-Wformat]

这是什么原因?

2 个答案:

答案 0 :(得分:2)

您有9个格式说明符,只有8个printf个参数。

警告解释了自己。你没有忽略这一点很好,因为这个调用的结果是 undefined

要解决此问题,请添加额外参数或删除其中一个格式说明符(%)。

答案 1 :(得分:0)

如果将格式说明符与其参数对齐,则错误会变得更明显:

fprintf(fitxer_sortida,
        "blob %d"  " ->\t a=%7.0f"   "\t p=%8.2f"    " (%8.2f extern)\t "  "pconvex=%8.2f\t "   "ext=%.0f\t "  "m=%7.2f\t "  "c=%3.2f\t "    "l=%8.2f\n",
        i,          area[i],          perimetre[i],  externPerimeter[i],   perimetreConvex[i],  exterior[i],   /* oops */    compacitat[i],   longitud[i]);

这会导致排长队 - 如果您不喜欢这样,请考虑拨打多次fprintf()