atoi
是 C/C++ 标准库中用于将字符串转换为整数的函数。以下是关于 atoi
的详细介绍和使用指南:
一、基本概念
1. 函数原型
#include <stdlib.h>
int atoi(const char *str);
2. 功能
将字符串 str
转换为一个 int
类型的整数,跳过前导空格,处理正负号,直到遇到非数字字符为止。
二、转换规则
1. 合法输入格式
- 前导空格:会被自动跳过。
- 正负号:可选的
+
或-
符号。 - 数字字符:
0-9
的字符序列。 - 终止条件:遇到非数字字符(如
'a'
、'.'
)时停止转换。
2. 示例
输入字符串 | 输出结果 | 说明 |
---|---|---|
"123" | 123 | 普通整数 |
" -456" | -456 | 带前导空格和负号 |
"+789" | 789 | 带正号 |
"123abc" | 123 | 遇到非数字字符停止转换 |
" -0010" | -10 | 忽略前导零 |
"abc123" | 0 | 无有效数字 |
"2147483648" | 2147483647 | 溢出时返回 INT_MAX |
三、返回值与错误处理
1. 返回值
- 成功:返回转换后的整数值。
- 失败:若字符串不包含有效数字,返回
0
。
2. 注意事项
- 溢出处理:若转换结果超出
int
范围(如INT_MAX
或INT_MIN
),行为未定义(可能返回截断值或其他值)。 - 错误检测:无法区分输入错误(如
"abc"
)和合法值0
,需手动验证输入。
四、使用示例
#include <stdio.h>
#include <stdlib.h>
int main() {
const char *str1 = "12345";
const char *str2 = " -678";
const char *str3 = "2147483649"; // 超过 INT_MAX
const char *str4 = "abc123";
const char *str5 = " +0090";
int num1 = atoi(str1);
int num2 = atoi(str2);
int num3 = atoi(str3);
int num4 = atoi(str4);
int num5 = atoi(str5);
printf("str1: %d\n", num1); // 输出: 12345
printf("str2: %d\n", num2); // 输出: -678
printf("str3: %d\n", num3); // 输出: 2147483647 (溢出)
printf("str4: %d\n", num4); // 输出: 0
printf("str5: %d\n", num5); // 输出: 90
return 0;
}