OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4027|回复: 3

字符串转浮点程序运行出错

[复制链接]

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2019-9-19
在线时间
45 小时
发表于 2020-10-1 18:08:25 | 显示全部楼层 |阅读模式
12金钱
本帖最后由 阳朔的海角 于 2020-10-1 18:09 编辑
  1. #include "stdio.h"
  2. #include "stdlib.h"

  3. char buffer[3];
  4. float data_test[2];

  5. int k = 0;
  6. int n = 0;
  7. int m = 0;


  8. int main()
  9. {
  10.         char test[2][9] = { {"0.1 0.2 "},{"0.3 0.4 "} };
  11.         float a;

  12.         for (int j = 0; j < 2; j++) {
  13.                 for (int i = 0; i < 8; i++) {
  14.                         if (test[j][i] == 0x20) {
  15.                                 a = atof(buffer);
  16.                                 data_test[n++] = a;
  17.                                 k = 0;
  18.                                 continue;
  19.                         }
  20.                         else {
  21.                                 buffer[k++] = test[j][i];
  22.                         }
  23.                 }
  24.                 printf("%f\n", data_test[0]);
  25.                 printf("%f\n", data_test[1]);
  26.         }

  27. }
复制代码
请问为什么这样写,0.3 0.4输出不了,从debug上看a的值是可以变成0.3 0.4的

最佳答案

查看完整内容[请看2#楼]

找到错误原因了,n要清0
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2019-9-19
在线时间
45 小时
 楼主| 发表于 2020-10-1 18:08:26 | 显示全部楼层
找到错误原因了,n要清0
回复

使用道具 举报

3

主题

314

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-10-4 14:34:36 | 显示全部楼层
阳朔的海角 发表于 2020-10-1 18:08
找到错误原因了,n要清0

其实有一处错误, atof(buffer) 之前要在buffer的字符串添加结尾符,如果不加的话,若两个小数的长度不一样就会出错。
我这里随便你优化下算法:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. static float data_test[2];

  5. int main(void)
  6. {
  7.     char *p, *str;
  8.     char test[2][9] =
  9.     {
  10.             {"0.1 0.2 "},
  11.             {"0.3 0.4 "}
  12.     };

  13.     for (int i = 0; i < 2; i++)
  14.     {
  15.         str = test[i];
  16.         p = strchr(test[i], ' ');
  17.         if (p == NULL)
  18.         {
  19.             continue;
  20.         }

  21.         *p = '\0';
  22.         data_test[0] = atof(str);

  23.         str = p + 1;
  24.         data_test[1] = atof(str);

  25.         printf("%.1f, %.1f\n", data_test[0], data_test[1]);
  26.     }

  27.     return 0;
  28. }
复制代码




回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2019-9-19
在线时间
45 小时
 楼主| 发表于 2020-10-4 15:29:04 | 显示全部楼层
ufbycd 发表于 2020-10-4 14:34
其实有一处错误, atof(buffer) 之前要在buffer的字符串添加结尾符,如果不加的话,若两个小数的长度不一 ...

多谢大佬回复,我试了试自己的代码,修改小数长度,运行后确实会有这样的错误,这个是我查UART串口通信BUG的时候单独拎出来的小模块,我大概知道我第二帧数据为啥会出错了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 07:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表