繁体   English   中英

printf格式字符串棉绒警告

[英]printf format string lint warning

我被困在修复古老的代码,这是今天的问题:

output_file_status = fprintf ( data_file, "%03d%08s%+014.2f%06.3f%",
    LongValue, CharStarValue, Double1, Double2 );

Lint32产生:Lint32结果为“格式错误的字符串”

1)你们都同意格式字符串不能以%符号结尾吗? 我不认为独立%具有意义。

2)当我删除尾随的%或附加一个额外的% ,我仍然收到相同的警告。

这使用的是Oracle Pro * C编译器(因此CharStarValue实际上是(char *)VarChar.arr)。

一步一步地:

“%03d”期望为int OP提供LongValue 使用long ,说明符应为“%03ld”

“%08s”需要一个指向char的指针。 OP提供CharStarValue 好。 但是对于%s ,说明符中的“ 0”是未定义的行为 推荐“%8s”

“%+ 014.2f”期望为double 好。 标志“ +”,“ 0”可以。

“%06.3f”期望为double 好。 标志“ +”,“ 0”可以。

未定义行为之后,“%”应包含某些内容。 建议删除或“ %%”。


到OP的2分

1正确的格式不应以孤立的%结尾,而可以以配对的%% s结尾。
独立的%引入“如果转换规范无效,则行为未定义” C11 7.21.6.1 9。

2要摆脱所有警告,请尝试使用"%03ld%8s%+014.2f%06.3f"

是的,您很正确地认为最后的%本身就是错误。 在格式化的输出中产生一个文字%应该为%%

可能是您的短毛猫还在抱怨使用%03dlong值。 那应该是%03ld

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM