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

C语言中strtol函数的&endptr参数作用是什么?

关于strtol函数的详细解释

strtol(str, &endptr, base) 是C标准库的核心函数之一,专门用来把字符串形式的数字转换成long类型整数,下面拆解每个参数的实际作用:

  • str:你要转换的目标字符串,比如"1234"、"0x1F"(十六进制)或者"0755"(八进制)这类带数字的字符串。
  • base:转换时用的进制,范围是2到36;传0的话会自动识别——以0x开头按十六进制,以0开头按八进制,其余默认十进制。
  • &endptr:这是你搞不懂的关键,它根本不是用来找字符串末尾或\0的,而是用来记录转换停止的位置:
    • 函数会从str的第一个字符开始解析,遇到第一个不属于当前进制的字符时立刻停止。
    • 这个“停止字符”的地址会被存在endptr指向的指针变量里。

举个实际例子看效果

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

int main() {
    char str[] = "123abc789";
    char *endptr;
    long result = strtol(str, &endptr, 10);

    printf("转换出的数字:%ld\n", result); // 输出 123
    printf("转换停止后剩下的字符串:%s\n", endptr); // 输出 abc789
    return 0;
}

这个例子里,函数解析到'a'时,发现它不是十进制数字,就停了,所以endptr指向'a'的地址,转换结果是前面的123。

endptr的实用场景

  • 检查转换是否完全:如果*endptr == '\0',说明整个字符串都被成功转换成数字了,没有多余字符。
  • 处理混合内容的字符串:比如从"price:99.99"里提取开头的非数字部分后,用endptr定位到数字起始位置再转换。
  • 排查转换失败:如果字符串开头就不是有效数字(比如"abc123"),转换结果会是0,且endptr指向字符串的第一个字符,能快速判断转换没成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:44:53