C语言中的atoi和atof怎么用?有什么区别?

C语言中的atoi和atof怎么用?有什么区别?

atoi和atof是C语言中用于字符串转换的函数,分别将字符串转换为整型(int)和浮点型(double),具体用法和区别如下:

头文件两者均定义在<stdlib.h>中,使用前需包含该头文件。

atoi的用法

功能:将字符串转换为int类型整数。

示例:int num = atoi("123"); // 返回123

规则:

若字符串开头非数字(如"abc123"),返回0。

遇到非法字符(如"123abc")时停止转换,返回已解析部分(123)。

忽略小数点后的内容(如"123.45"返回123)。

atof的用法

功能:将字符串转换为double类型浮点数。

示例:double num = atof("123.45"); // 返回123.45

规则:

支持小数点、科学计数法(如"123.45e3"返回123450.0)。

若字符串开头非数字(如"abc123"),返回0.0。

遇到非法字符时停止转换,返回已解析部分(如"123.45abc"返回123.45)。

返回类型

atoi返回int,atof返回double。

小数点处理

atoi遇到小数点停止,仅取整数部分(如"123.99"返回123)。

atof能完整解析小数部分(如"123.99"返回123.99)。

非法输入容忍度

两者对以非数字开头的字符串均返回0(或0.0)。

对中间含非法字符的字符串,atoi和atof均返回已解析部分(如"123abc"分别返回123和123.0)。

不可依赖返回值判断成功

两者在失败时可能返回0(或0.0),与合法输入"0"无法区分。需手动校验输入合法性。

避免空指针或空字符串

传入空指针(NULL)或空字符串("")会导致未定义行为(如程序崩溃)。

严格校验场景建议替代函数

使用strtol(整数)或strtod(浮点数)可检查转换结束位置,更安全。

示例(strtol):char *endptr;int i = strtol("123abc", &endptr, 10);if (*endptr != '0') { printf("非法字符:%sn", endptr); // 输出"abc"}

atoi的适用场景

输入格式确定且仅需整数时(如配置文件中的简单数值)。

示例:char *str = "42";int age = atoi(str); // 简洁高效

atof的适用场景

需处理小数或科学计数法时(如物理计算、金融数据)。

示例:char *str = "3.14e2"; // 科学计数法double pi = atof(str); // 返回314.0

严格校验场景

使用strtol或strtod替代,避免隐式错误。

示例(strtod):char *endptr;double d = strtod("123.45abc", &endptr);if (*endptr != '0') { printf("转换未完全成功n");}

标签:C语言,atoi,atof