我正在尝试使用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的新手,我不知道问题可能是什么。任何帮助赞赏!
char string_two[6] = "1.2e-4"; ... sscanf(string_two, "%lf", &two);
希望扫描一个字符串。 string_two[]
不是字符串,因为它缺少空字符。结果:未定义的行为(UB)。
解决方案:确保string_two[]
是一个字符串。