You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何将字符串指针指定位置的字符转换为int类型

问题分析

原代码存在语法错误,无法正常运行:

  • atoi(s[0])的调用不符合atoi函数的入参要求:atoi需要传入C风格字符串(const char*类型的指针),而s[0]是单个char类型的字符值,直接传入会把字符的ASCII值当做内存地址访问,大概率触发段错误或者得到异常结果。
最高效实现方案

利用ASCII编码中数字字符连续排列的特性,直接做减法运算即可,不需要调用任何库函数,时间复杂度为O(1),无额外开销,是当前需求下的最优解:

#include <stdio.h>

int main()
{
    char* s = "123456";
    // 可先增加合法性判断,避免非数字输入得到错误结果
    int number = (s[0] >= '0' && s[0] <= '9') ? (s[0] - '0') : -1;
    printf("test %d",number);

    return 0;
}

实现原理

ASCII编码规则中,'0'到'9'的编码值是连续递增的,'0'的编码值为48、'1'为49,以此类推,单个数字字符减去'0'的编码值,刚好可以得到对应的整数值。

如果非要用atoi实现也可以,但会有额外的函数调用、字符串构造开销,效率远低于上述方案,参考写法:

char tmp[2] = {s[0], '\0'};
int number = atoi(tmp);

内容的提问来源于stack exchange,提问作者Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:24:01