如何在C语言中将char*转换为int或double

10

抱歉,如果这是一个非常简单的问题,但是我对C语言非常陌生。我想要将char*转换为double和int类型,但是似乎找不到如何做出解释。

编辑: 我正在读取用户输入,这是一个char*。我想将一半的输入从“23”转换为23,另一半从“23.4”转换为23.4。


你是指转换还是强制类型转换?换句话说,您想将“42”转换为数字42,还是将char *指向的内存视为int - JaredPar
可以在这里找到如何使用strtol()的工作代码。由于您不太确定面临的问题,我将其关闭为“过于局部化”。 - Tim Post
2个回答

25

你可以像这样强制类型转换char*

char  *c = "123.45";
int    i = (int) c;      // cast to int
double d = (double) c;   // cast to double

但是那样会得到荒谬的结果。它只是强制将指针视为整数或双精度浮点数。

我猜你想要的是将文本解析为intdouble,而不是进行强制转换。尝试这个:

char  *c = "123.45";
int    i = atoi(c);
double d = atof(c);

4
atoi() 不安全。 - Tim Post

2

严格来说,你可以这样做:(int)指针。

然而,你可能正在寻找atoi和atof函数。

atoi是一个函数,它将指向包含十进制整数的字符串的char*转换为整数。

atof同样适用于double。


3
如果仅考虑因为atoi()在失败和成功解析0时返回相同结果,建议使用strtol()系列函数。 - Pascal Cuoq
2
atoi() 没有任何错误检查。 strtol() 处理错误,设置有意义的 errnos,并复制输入中发现的垃圾以供后续检查。 - Tim Post
正确,但是atoi更接近于高级语言中将字符串转换为整数的等效操作。 - Joshua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接