[英]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"
。
是的,您很正确地认为最后的%
本身就是错误。 在格式化的输出中产生一个文字%
应该为%%
。
可能是您的短毛猫还在抱怨使用%03d
的long
值。 那应该是%03ld
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.