打印
[C语言]

请教个关于sprintf相关的问题

[复制链接]
841|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 nightingale2003 于 2019-1-4 13:11 编辑

关于 sprintf的使用,按下例,应该是把3.1455取3位小数后转换成字符串,但打印出来的用HEX 显示确实3F(换行啥的忽略),求解
#include "stdio.h"
char _wifiData[20];

void setup()
{
    Serial.begin(38400);
   sprintf(_wifiData,"%.3f",3.1455);
}
void loop()
{
    Serial.println(_wifiData);

}




以下是查找sprintf发现的其他问题,已解决
Serial.println是arduino的串口打印函数,如果我直接Serial.println(“neko”);是正常的,但是用数组或指针的话打印出来个  “?”,想问下是哪个位置弄错了

char str[10];
void setup()
{
    Serial.begin(38400);
}
void loop()
{
    *str="neko";
    Serial.println(str);
}

相关帖子

沙发
nightingale2003|  楼主 | 2019-1-4 11:18 | 只看该作者
突然想起来,以前遇到过这种问题。
初始化能这样赋值,但后面不能,得用strcpy之类的解决

使用特权

评论回复
板凳
linqing171| | 2019-1-4 22:42 | 只看该作者
char str[10];
*str的意思是str[0],
等号右边是  随机分配的某字符串的地址强制转换成char,(而不是字符串的第一个字节的内容);

可以把char str[10]改为 const char * str;

使用特权

评论回复
地板
gavinpeng2| | 2019-1-5 10:06 | 只看该作者
第一个问题,我觉得没问题,用visual studio 2005 验证过也没问题,代码如下:
char _wifiData[20];
sprintf(_wifiData,"%.3f",3.1455);
printf("%s\r\n", _wifiData);

执行输出:
3.146

不知道是不是编译器环境不一样。

第二个问题,楼上正解。

有语言问题, 我的经验是拿visual studio 建个win32工程验证一下。


------------------------------------------------------------------------------------
直接搜:USB转TTL无线版


使用特权

评论回复
5
nightingale2003|  楼主 | 2019-1-5 10:56 | 只看该作者
感谢楼上两位,
昨天下午查资料的时候看到有人说arduino的编译环境下,sprintf是不支持float  double  和long的,此贴可结

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

105

帖子

2

粉丝