strtol() 函数

功能概述:字符串转换为数值。其声明位于头文件 <stdlib.h>

C 库函数 long int strtol(const char *str, char **endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。

参数
str -- 要转换为长整数的字符串。
endptr -- 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
base -- 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。如果 base 为 0,则会根据字符串的前缀来判断进制:如果字符串以 '0x' 或 '0X' 开头,则将其视为十六进制;如果字符串以 '0' 开头,则将其视为八进制;否则将其视为十进制。

返回值
函数返回被转换的长整型整数值。如果输入字符串不符合数字格式,strtol() 将返回 0。如果转换结果超出了 long 整数的表示范围,那么将产生溢出,并设置 errno 为 ERANGE。你可以使用 <errno.h> 头文件中的 errno 变量来检查是否有溢出发生。

 

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

int str2i(const char *str, char split, char **endptr)
{
    int ret = 0;
    ret = strtol(str, endptr, 10);
    if (*endptr != NULL) {
        if (**endptr == split) {
            *endptr += 1;
        }
    }

    return ret;
}

int main(void)
{
    char *test_str = "1,2,3,4,5";
    char *end = NULL;
    int res[5] = {0};
    char *p_shift = test_str;

    for (int i = 0; i < 5; i++) {
        res[i] = str2i(p_shift, ',', &end);
        p_shift = end;
    }

    for (int i = 0; i < 5; i++) {
        printf("%d ", res[i]);
    }
}

 

posted @   星辰大海浩瀚宇宙呀  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示