当前位置: 首页 > article >正文

atoi 函数

atoi 在遇到第一个非数字字符时立即停止转换,后续字符被忽略。

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

int main() {
    const char *test_strs[] = {
        "123",          // 有效整数
        "  456  ",       // 前后有空格
        "-789",         // 负数
        "+1000",        // 正数带符号
        "abc123",       // 非数字字符(返回0?)
        "123abc",       // 同上
        "",             // 空字符串(返回0?)
        "0001",         // 前导零
        "2147483647",    // INT_MAX
        "2147483648"     // INT_MAX +1(溢出)
    };

    for (int i = 0; i < sizeof(test_strs)/sizeof(test_strs[0]); i++) {
        printf("atoi(\"%s\") = %d\n", test_strs[i], atoi(test_strs[i]));
    }

    return 0;
}
atoi("123") = 123
atoi("  456  ") = 456
atoi("-789") = -789
atoi("+1000") = 1000
atoi("abc123") = 0   // 未定义行为!实际可能返回随机值
atoi("123abc") = 123 // 未定义行为!实际可能返回随机值
atoi("") = 0       // 未定义行为!实际可能返回随机值
atoi("0001") = 1
atoi("2147483647") = 2147483647
atoi("2147483648") = -2147483648 // 溢出导致未定义行为

 

对非数字字符的处理
  • 问题atoi 在遇到第一个非数字字符时立即停止转换,后续字符被忽略。
  • 示例"123a45" → 返回 123,但未报错。
  • 风险:无法检测输入是否合法(如 "123abc" 可能被误认为 123)。
2. ​前导零的处理
  • 行为:自动忽略前导零,"0001" → 1
  • 注意:这与你的需求一致,但需确保字符串确实表示整数。
3. ​符号处理
  • 规则:仅允许单个 + 或 -,且必须位于字符串开头(忽略空格后)。
  • 示例"-+123" → 未定义行为(可能返回 0 或随机值)。
4. ​空字符串与异常输入
  • 空字符串"" → 未定义行为(可能返回 0)。
  • 无数字字符"abc" → 未定义行为(可能返回 0)。
5. ​溢出问题
  • 风险:当输入超出 int 范围时,结果可能截断或取反(如 INT_MAX + 1 → -INT_MIN)。
  • 示例"2147483648" 在 32 位系统中可能返回 -2147483648

http://www.kler.cn/a/593626.html

相关文章:

  • IP查询底层逻辑解析:数据包与地理位置
  • stm32 2.0.3.0
  • 知识库项目开场白
  • 封装Socket编程接口
  • 蓝桥杯--冲刺题单--随时更新
  • 物联网平台与边缘计算网关的深度结合应用
  • Spring Boot 集成 Kafka 消息发送方案
  • ‌C# I/O 核心用法
  • 【工程实践/大批量文件处理】文件排序
  • 笛卡尔轨迹规划之齐次变换矩阵与欧拉角、四元数的转化
  • 数据类设计_图片类设计之7_矩阵图形类设计更新_实战之页面简单设计(前端架构)
  • VLLM专题(十九)—兼容 OpenAI 的服务器
  • Matplotlib 柱形图
  • 波场trx质押能量租赁平台开发
  • 通信网络安全防护风险评估报告怎么写?范文模版分享
  • 剑指 Offer II 113. 课程顺序
  • NPN三极管基极接稳压管的作用
  • 识别并脱敏上传到deepseek/chatgpt的文本文件中的护照信息
  • companion object和object 从kotlin转java分析
  • Python+selenium,轻松搭建Web自动化测试框架