引言
atoi() 函数是 C 标准库中用于将字符串(ASCII 字符串)转换为整数(int 类型)的核心函数,其名称是 “ASCII to Integer” 的缩写。
一、基本信息
函数原型
#include <stdlib.h> // 必须包含的头文件
int atoi(const char *str);/*
参数 str:指向待转换的字符串的指针(const 表示函数不修改输入字符串)。
返回值:转换后的 int 类型整数;若转换失败(如字符串无有效数字),则返回 0。
*/
核心功能
将符合整数格式的字符串(如 "123"、"-456"、" 789abc")转换为对应的整数,忽略字符串开头的空白字符(空格、制表符 \t、换行符 \n 等),遇到非数字字符时停止转换。
二、关键特性
转换规则示例
输入字符串 | 转换结果 | 说明 |
---|---|---|
"123" | 123 | 正常正整数 |
"-456" | -456 | 正常负整数 |
" 789abc" | 789 | 忽略开头空白,遇到 'a' 停止 |
"abc123" | 0 | 无开头有效数字,转换失败 |
""(空字符串) | 0 | 无任何字符,转换失败 |
" +999.123" | 999 | 遇到 '.' 停止,仅转换整数部分 |
局限性
1.无法区分 “转换失败” 与 “有效结果 0”
2.整数范围溢出的未定义行为
3.不支持进制指定
三、示例代码
#include <stdio.h>
#include <stdlib.h> // 包含 atoi() 的头文件int main()
{// 测试不同类型的输入字符串char str1[] = "12345"; // 正常正整数char str2[] = "-6789"; // 正常负整数char str3[] = " 100abc"; // 带空白和非数字后缀char str4[] = "abc123"; // 非数字开头char str5[] = "2147483648"; // 超出 32 位 int 最大值(未定义行为)// 调用 atoi() 转换并打印结果printf("atoi(\"%s\") = %d\n", str1, atoi(str1)); // 12345printf("atoi(\"%s\") = %d\n", str2, atoi(str2)); // -6789printf("atoi(\"%s\") = %d\n", str3, atoi(str3)); // 100printf("atoi(\"%s\") = %d\n", str4, atoi(str4)); // 0(转换失败)printf("atoi(\"%s\") = %d\n", str5, atoi(str5)); // 未定义(可能返回 2147483647 或其他值)return 0;
}
四、与类似函数的对比(atoi() vs strtol())
atoi() 是 strtol() 的简化版本,两者的核心差异如下:
特性 | atoi(const char *str) | strtol(const char *str, char **endptr, int base) |
---|---|---|
错误处理 | 无(失败返回 0,无法区分有效 0) | 可通过 endptr 判断是否转换到非数字字符 |
整数范围 | 仅支持 int,溢出未定义 | 支持 long,溢出返回 LONG_MAX/LONG_MIN |
进制支持 | 仅十进制 | 支持 2~36 进制(base=0 自动识别十进制 / 八进制 / 十六进制) |
适用场景 | 简单十进制转换,无需严谨错误处理 | 需判断转换有效性、支持多进制或大整数的场景 |