我无法修复古代代码,这就是今天的问题:
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)。
答案 0 :(得分:2)
逐一拍摄:
"%03D"期待int
。 OP提供LongValue
。使用long
时,说明符应为"%03ld" 。
"%08S"期望指向char
的指针。 OP提供CharStarValue
。好。但是" 0"在%s
中,说明符是未定义的行为。推荐"%8s"
"%+ 014.2f"期待double
。好。旗帜' +',' 0'没事。
"%06.3f"期待double
。好。旗帜' +',' 0'没事。
"%"应该有其他东西行为未定义。建议删除或" %%"。
到OP的2分
1正确的格式不应以单独的%
结尾,但可能以配对的%%
结尾。
独立%
引入"如果转换规范无效,则行为未定义" C11 7.21.6.1 9。
2要删除所有警告,请尝试"%03ld%8s%+014.2f%06.3f"
。
答案 1 :(得分:1)
是的,你是正确的%
本身就是一个错误。 <{1}}应该在格式化的输出中生成一个文字%%
。
可能是你的linter也在抱怨%
使用%03d
值。那应该是long
。