char*argv[]到普通C中的浮点类型转换
我试图将argv[1]转换为浮点值,但最终出现编译错误。这是我的密码char*argv[]到普通C中的浮点类型转换,c,types,casting,C,Types,Casting,我试图将argv[1]转换为浮点值,但最终出现编译错误。这是我的密码 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { double circleArea = 3.14159 * atof(argv[1]) * atof(argv[1]); //this works double circleArea = 3.14159 * (doubl
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
double circleArea = 3.14159 * atof(argv[1]) * atof(argv[1]); //this works
double circleArea = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not
return 0;
}`
您看到的问题与强制转换/转换有关。在第二行中,您得到了错误-您需要将字符串转换为
double
,但您没有-您只是在转换值,即“告诉编译器您有一个double
”,而不是
在C语言中铸造类似的类型-int
到float
,short
到double
,float
到long
,char
到int
。当然,在某些转换中可能会丢失精度。但是,例如,您不能将int[]
转换为int
(实际上,您可能会这样做,但您肯定会得到意外的结果),因为一个是数组,另一个是单个变量
要使其工作,应使用
atod
函数。查看详细信息。argv[1]
是一个char*
,将char*
强制转换为double
没有意义。铸造与铸造不同converting@MichaelWalz-实际上,转换是一种转换类型。这里的问题是,将char*
转换为float
(或double
)与解释和解析字符串以获得float
不同。后者就是atof()
所做的。@Peter是的,这是一个更好的解释。@MichaelWalz-我也这么认为;)这是一个简单的C问题,而不是C/C++问题。
circleArea.c: In function ‘main’:
circleArea.c:9:2: error: pointer value used where a floating point value was expected
double area = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not
^~~~~~
circleArea.c:9:2: error: pointer value used where a floating point value was expected