C语言string转int,如何正确实现?

99ANYc3cd6
预计阅读时长 10 分钟
位置: 首页 C语言 正文

在C语言中,将字符串(char*char[])转换为整数(int)主要有以下几种方法:

c语言 string转int
(图片来源网络,侵删)

方法1:使用 atoi() 函数(最简单)

atoi() 是C标准库函数,定义在 <stdlib.h> 中,用于将字符串转换为 int 类型。

#include <stdio.h>
#include <stdlib.h> // 包含 atoi 函数
int main() {
    char str[] = "12345";
    int num = atoi(str); // 直接转换
    printf("转换后的整数: %d\n", num); // 输出: 12345
    // 处理无效输入(非数字字符)
    char invalid_str[] = "12a34";
    int invalid_num = atoi(invalid_str); // 遇到非数字字符时停止转换
    printf("无效转换结果: %d\n", invalid_num); // 输出: 12
    return 0;
}

特点:

  • 简单直接,但无法检测转换错误(如输入 "abc" 会返回 0)。
  • 遇到非数字字符会停止转换(如 "123abc"123)。
  • 空字符串或纯非数字字符串返回 0

方法2:使用 strtol() 函数(更安全,推荐)

strtol()(string to long)是更强大的转换函数,可以检测错误并处理不同进制(如十进制、十六进制等),定义在 <stdlib.h> 中。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h> // 用于检测错误
int main() {
    char str[] = "12345";
    char *endptr; // 用于存储转换停止的位置
    // 转换为长整型(long),后续可强制转为 int
    long num = strtol(str, &endptr, 10); // 10 表示十进制
    // 检查转换是否成功
    if (endptr == str) {
        printf("转换失败:输入不是有效的数字!\n");
    } else if (*endptr != '\0') {
        printf("部分转换成功,剩余字符: %s\n", endptr);
    } else {
        printf("转换后的整数: %ld\n", num);
    }
    // 处理溢出情况
    errno = 0; // 重置错误标志
    char overflow_str[] = "999999999999999999999";
    long long_num = strtol(overflow_str, &endptr, 10);
    if (errno == ERANGE) {
        printf("错误:数值超出 long 范围!\n");
    }
    return 0;
}

特点:

c语言 string转int
(图片来源网络,侵删)
  • 可以检测转换是否完全成功(通过 endptr)。
  • 支持不同进制(如 strtol("FF", &endptr, 16) 会将十六进制 "FF" 转为 255)。
  • 通过 errno 检测溢出(ERANGE)。

方法3:手动实现(自定义逻辑)

如果需要更精细的控制(如处理前导空格、正负号等),可以手动实现转换逻辑。

#include <stdio.h>
#include <ctype.h> // 用于 isdigit 函数
int my_atoi(const char *str) {
    int sign = 1; // 默认正数
    int num = 0;
    int i = 0;
    // 跳过前导空格
    while (str[i] == ' ') {
        i++;
    }
    // 处理正负号
    if (str[i] == '+' || str[i] == '-') {
        sign = (str[i] == '-') ? -1 : 1;
        i++;
    }
    // 逐个字符转换
    while (isdigit(str[i])) {
        num = num * 10 + (str[i] - '0');
        i++;
    }
    return sign * num;
}
int main() {
    char str[] = " -12345";
    int num = my_atoi(str);
    printf("转换后的整数: %d\n", num); // 输出: -12345
    return 0;
}

特点:

  • 完全可控,适合特殊需求(如自定义错误处理)。
  • 需要自行处理边界情况(如溢出)。

方法 优点 缺点 适用场景
atoi() 简单快速 无法检测错误,不安全 简单场景,输入可信时
strtol() 安全,支持错误检测和进制转换 稍复杂 生产环境,推荐使用
手动实现 完全可控 需要自行处理所有边界情况 特殊需求(如自定义格式)

推荐优先使用 strtol(),它在安全性和功能性之间取得了平衡。

c语言 string转int
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
C语言Windows程序设计如何入门?
« 上一篇 昨天
dede后台顶部404问题如何解决?
下一篇 » 昨天
取消
微信二维码
支付宝二维码

目录[+]