C语言中atoi()函数的作用

本文介绍了atoi()函数的基本用法及示例代码。atoi()函数能够将字符串转换为整数,例如,通过使用atoi()可以将字符数组123转换为整数123。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

atoi()函数是把字符串转化为数字。

实例:

#include<stdlib.h>
#include<stdio.h>

int main()
{
char str[]="123";
int a;
a=atoi(str); /*将字符串转化为int型的数字*/
printf("%d\n",a);

}
输出为123
`atoi` 是 C 语言标准库 `<stdlib.h>` 中的一个函数,用于将字符串转换为整数(`int` 类型)。其全称是 "ASCII to Integer",作用是将一个表示整数的字符串转换为对应的 `int` 类型数值。 ### 函数原型: ```c int atoi(const char *str); ``` ### 功能说明: - `atoi` 函数会跳过前面的空白字符(如空格、制表符等)。 - 然后读取可选的正负号(`+` 或 `-`)。 - 接着读取尽可能多的连续数字字符,并将其转换为整数。 - 遇到非数字字符时停止转换。 - 如果字符串不包含有效整数,则返回 `0`。 - 如果转换的值超出 `int` 的范围(溢出),行为是未定义的(通常是返回 `INT_MAX` 或 `INT_MIN`,但不保证)。 --- ### 示例代码: ```c #include <stdio.h> #include <stdlib.h> int main() { const char *str1 = "12345"; const char *str2 = " -678"; const char *str3 = "987abc"; const char *str4 = "abc123"; int num1 = atoi(str1); int num2 = atoi(str2); int num3 = atoi(str3); int num4 = atoi(str4); printf("num1 = %d\n", num1); // 输出 12345 printf("num2 = %d\n", num2); // 输出 -678 printf("num3 = %d\n", num3); // 输出 987 printf("num4 = %d\n", num4); // 输出 0 return 0; } ``` --- ### 代码解释: 1. `atoi(str1)` 将 `"12345"` 转换为整数 `12345`。 2. `atoi(str2)` 忽略前导空格并处理负号,得到 `-678`。 3. `atoi(str3)` 提取开头的数字部分 `"987"`,忽略后面的字母。 4. `atoi(str4)` 没有以数字开头,因此返回 `0`。 --- ### 注意事项: - `atoi` 不会报告错误。如果输入无效,它只是返回 `0`,这可能会导致歧义(例如无法区分真正的 `0` 和无效输入)。 - 对于更健壮的转换,建议使用 `strtol` 函数,它可以检测转换错误和溢出。 --- ### 使用 `strtol` 替代 `atoi` 的示例: ```c #include <stdio.h> #include <stdlib.h> #include <errno.h> int safe_atoi(const char *str, int *out) { char *endptr; errno = 0; long value = strtol(str, &endptr, 10); if (errno == ERANGE || value < INT_MIN || value > INT_MAX) { return 0; // 溢出 } if (endptr == str || *endptr != '\0') { return 0; // 非法输入或无效字符 } *out = (int)value; return 1; // 成功 } int main() { const char *str = "12345"; int num; if (safe_atoi(str, &num)) { printf("成功转换: %d\n", num); } else { printf("转换失败或无效输入\n"); } return 0; } ``` 这个版本可以安全地检测错误和非法输入。 --- ### 相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值