[C语言] 请教个关于sprintf相关的问题

[复制链接]
 楼主| nightingale2003 发表于 2019-1-4 10:46 | 显示全部楼层 |阅读模式
本帖最后由 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无线版


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| nightingale2003 发表于 2019-1-5 10:56 | 显示全部楼层
感谢楼上两位,
昨天下午查资料的时候看到有人说arduino的编译环境下,sprintf是不支持float  double  和long的,此贴可结
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

105

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

31

主题

105

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部