现在位置: 首页 > C 教程 > 正文

C 库函数 - strtol()

C 标准库 - <stdlib.h> C 标准库 - <stdlib.h>

描述

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

声明

下面是 strtol() 函数的声明。

long int strtol(const char *str, char **endptr, int base)

参数

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

返回值

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

实例

下面的实例演示了 strtol() 函数的用法。

以下实例我们将字符串 "12345" 转换为长整型整数。strtol() 函数会将这个字符串转换为对应的整数值 12345。因为我们指定了 base 为 10,所以它会按照十进制进行转换。

实例

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

int main() {
    char str[] = "12345";
    char *endptr;
    long int num;

    num = strtol(str, &endptr, 10);

    if (*endptr != '\0') {
        printf("转换失败:输入字符串不是一个有效的整数。\n");
    } else {
        printf("转换结果:%ld\n", num);
    }

    return 0;
}

让我们编译并运行上面的程序,这将产生以下结果:

转换结果:12345

如果输入字符串不能被完全转换为整数,strtol() 函数将返回转换成功的部分,而 endptr 将指向未转换部分的第一个字符。在这个例子中,endptr 是指向字符串末尾的空字符 '\0',表示整个输入字符串都被成功转换为整数。

如果输入字符串包含非数字字符,例如 "12ab",那么 endptr 将指向 "ab" 的起始位置,指示转换失败。

实例

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

int main() {
    char str[] = "12ab";
    char *endptr;
    long int num;

    num = strtol(str, &endptr, 10);

    if (*endptr != '\0') {
        printf("转换失败:输入字符串不是一个有效的整数。未转换部分:%s\n", endptr);
    } else {
        printf("转换结果:%ld\n", num);
    }

    return 0;
}

以上实例我们将字符串 "12ab" 转换为长整型整数。strtol() 函数会尝试将这个字符串转换为对应的整数值 12,但因为字符串中包含非数字字符 "ab",转换无法完成。

输出将是:

转换失败:输入字符串不是一个有效的整数。未转换部分:ab

C 标准库 - <stdlib.h> C 标准库 - <stdlib.h>