
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");}
