strtol 函数包含在 C 语言标准库的 <stdlib.h> 头文件中,用于将字符串转换为长整数(long int
)。它可以处理各种格式的字符串,并且可以指定进制。
strtol
函数的时间复杂度是 O(n),其中 n 是输入字符串的长度。
函数原型
long int strtol(const char *nptr, char **endptr, int base);
参数分析
strtol(字符串名字, 字符指针变量的地址, 进制);
参数一:nptr
◦ 指向要转换的字符串的指针。
◦ 字符串可以包含前导空白字符,这些字符会被忽略。
◦ 字符串可以以 0x 或 0X 开头,表示十六进制数。
◦ 字符串可以以 0 开头,表示八进制数。
◦ 其他情况下,字符串被视为十进制数。
参数二:endptr
◦ 指向一个字符指针的指针,用于存储转换结束后的字符串位置。
◦ 如果 endptr 不为 NULL,strtol 会将转换结束后的字符串位置存储在 endptr 指向的指针中。
◦ 如果 endptr 为 NULL,则忽略此参数。
参数三:base
◦ 指定转换的进制,范围是 2 到 36。
◦ 如果 base 为 0,strtol 会根据字符串的前缀自动判断进制:
■ 如果字符串以 0x 或 0X 开头,视为十六进制。
· ■ 如果字符串以 0 开头,视为八进制。
■ 否则,视为十进制。
返回值
- 成功转换时,返回转换后的长整数。
- 如果字符串中没有有效的数字,返回 0。
- 如果转换结果超出 long int 的范围,返回 LONG_MAX 或 LONG_MIN,并设置 errno 为 ERANGE
使用样例
想了解实例点这里:字符串提取数字求和⭐-CSDN博客
#include <stdio.h>
#include <stdlib.h>int main() {const char *str1 = "01234a5abc";const char *str2 = "0x1234a5abckertty";const char *str3 = "01234a5abcww";char *aa;char *bb;char *cc;long int num;// 十进制转换num = strtol(str1,&aa,8);printf("str1: %s, num: %ld aa :%s\n", str1, num,aa);// 十六进制转换num = strtol(str2, &bb, 16);printf("str2: %s, num: %ld, bb: %s\n", str2, num, bb);// 八进制转换num = strtol(str3, &cc, 8);printf("str3: %s, num: %ld, cc: %s\n", str3, num, cc);return 0;
}//使用strtol前必须定义一个字符指针变量
输出
str1: 01234a5abc, num: 668 aa :a5abc
str2: 0x1234a5abckertty, num: 2147483647, bb: kertty
str3: 01234a5abcww, num: 668, cc: a5abcww --------------------------------
Process exited after 0.2409 seconds with return value 0
请按任意键继续. . .