【发布时间】:2019-02-26 21:14:57
【问题描述】:
我正在尝试使用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 语言的新手,我不知道问题可能是什么。任何帮助表示赞赏!
【问题讨论】:
-
string_two不是以空值结尾的。 -
string_two不是字符串。您不能将它与大多数<string.h>函数一起使用,printf()中的"%s"作为sscanf()的第一个参数,... -
您没有为
string_two提供足够的字符。 `"1.2e-4" 需要 7 个字符,而不是 6 个,因为字符串需要一个空终止符。 -
好的,非常感谢大家,我还没有听说过空终止符。所以一般来说,如果我要构建自己的字符串,我总是必须添加空终止符
'\0'作为最后一个字符(并使char的每个数组更长一个元素?) -
OT:关于:
int main (int argc, char **argv)当main()的参数不打算使用时,使用签名:int main( void )
标签: c string floating-point double scanf