C 非零浮点在sprintf中生成为\0

C 非零浮点在sprintf中生成为\0,c,linker,printf,newlib,psoc,C,Linker,Printf,Newlib,Psoc,我正在与psoc creator合作,我正在尝试在I2C OLED上打印一个介于-1和1之间的浮点值。 为了让它工作,我使用了函数sprintf。我在我的链接器-u\u printf\u float中添加了以下标志,因为我使用的是newlib nano,如果没有请求,它会忽略float处理代码。(我的问题可能与此有关……也许吧?) 出于测试目的,我写了以下几行: charstringbuffer[20]; sprintf(stringbuffer,(%1.1f,%1.1f)”,1.1,1.1;

我正在与psoc creator合作,我正在尝试在I2C OLED上打印一个介于-1和1之间的浮点值。 为了让它工作,我使用了函数sprintf。我在我的链接器
-u\u printf\u float
中添加了以下标志,因为我使用的是newlib nano,如果没有请求,它会忽略float处理代码。(我的问题可能与此有关……也许吧?) 出于测试目的,我写了以下几行:

charstringbuffer[20];
sprintf(stringbuffer,(%1.1f,%1.1f)”,1.1,1.1;
在调试期间,我注意到我试图打印的每个非零浮点都被打印为垃圾,前面有一个空字符。实际上,每个非零浮点都被以下3个字节替换。如果我用0.0替换所有值,那么它的打印效果非常好

0x00 '\000'
0x2E '.'
0x80 '\200'
我试图在下一行中打印的整数的行为与预期的一样


有人遇到过类似的问题吗?

不确定这是问题的原因,但是
%1.1f
格式看起来有点奇怪。这要求(总)宽度为
1
字符,小数点后为
1
数字。尝试
%3.1f
?@AdrianMole第一个
1
是最小宽度,而不是总宽度。还是有点奇怪。我怀疑这是问题的一部分。代码是否为
sprintf()
使用了正确的原型?正确的链接?无法复制到close@AdrianMole你说得对,不应该在句号前加上1。但这不是问题所在。不确定这是问题的原因,但
%1.1f
格式看起来有点奇怪。这要求(总)宽度为
1
字符,小数点后为
1
数字。尝试
%3.1f
?@AdrianMole第一个
1
是最小宽度,而不是总宽度。还是有点奇怪。我怀疑这是问题的一部分。代码是否为
sprintf()
使用了正确的原型?正确的链接?无法复制到close@AdrianMole你说得对,不应该在句号前加上1。但这不是问题所在。