当数组大小固定时,sscanf无法正确转换浮点数

问题描述 投票:0回答:1

我正在尝试使用sscanf将C中的char数组转换为double。我的问题最好在这个简短的最小工作示例中描述:

#include <stdio.h>

int main (int argc, char **argv)
{
  char string_one[]  = "1.2e-4";
  char string_two[6] = "1.2e-4";

  double one, two;

  sscanf(string_one, "%lf", &one);
  sscanf(string_two, "%lf", &two);

  printf("%e, %e\n", one, two);

  return 0;
}

使用GCC编译并运行生成的可执行文件返回1.200000e-04, 1.200000e-41,而不是两次相同的数字。如果我要转换的浮点数的形式为3e4(如果没有小数分隔符),则不会出现此问题。

对于我的程序,我必须定义一个具有固定大小的char数组(因为我在程序过程中填充数组),这就是我遇到这个问题的原因。

我想这个问题可能非常明显 - 但由于我是C的新手,我不知道问题可能是什么。任何帮助赞赏!

c string floating-point double scanf
1个回答
2
投票

char string_two[6] = "1.2e-4"; ... sscanf(string_two, "%lf", &two);希望扫描一个字符串。 string_two[]不是字符串,因为它缺少空字符。结果:未定义的行为(UB)。

解决方案:确保string_two[]是一个字符串。

© www.soinside.com 2019 - 2024. All rights reserved.