atoi() - 字符串( ASCLL )转换为整数( int )

引言

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));  // 12345
    printf("atoi(\"%s\") = %d\n", str2, atoi(str2));  // -6789
    printf("atoi(\"%s\") = %d\n", str3, atoi(str3));  // 100
    printf("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 自动识别十进制 / 八进制 / 十六进制)
适用场景 简单十进制转换,无需严谨错误处理 需判断转换有效性、支持多进制或大整数的场景
posted @ 2025-09-21 09:57  开心猪扒  阅读(51)  评论(0)    收藏  举报