C语言 strtol() 函数用法

news/2025/10/9 0:46:40/文章来源:https://www.cnblogs.com/FBsharl/p/19130304

strtol 是 C 标准库中的一个重要函数,用于将字符串转换为长整数。下面解释这个函数:

函数原型

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

参数说明

1. str - 要转换的字符串

  • 指向【以 null 结尾的字符串】的指针(非常重要:请确保输入字符串以 null 结尾)

  • 函数会跳过前面的空白字符

2. endptr - 结束指针(可选)

(主要的作用:用于输入错误检测)

  • 如果非 NULL,函数会将第一个无效字符的地址存储在这里

  • 如果为 NULL,则忽略此信息

3. base - 进制基数

  • 2-36:指定转换的进制

  • 0:自动检测进制(根据字符串前缀)

    • 0x 或 0X:十六进制

    • 0:八进制

    • 其他:十进制

返回值

  • 成功:转换后的长整数值

  • 失败:0 或 LONG_MAX/LONG_MIN(溢出时)

  • 设置 errno 来指示错误类型

使用示例

1. 基本转换

#include <stdlib.h>
#include <stdio.h>int main() {const char* str1 = "12345";const char* str2 = "0x1A3F";const char* str3 = "1010";//指定字符串和进制,进行数字的转换long num1 = strtol(str1, NULL, 10);  // 十进制: 12345long num2 = strtol(str2, NULL, 0);   // 自动检测: 6719long num3 = strtol(str3, NULL, 2);   // 二进制: 10//打印结果以十进制显示printf("num1 = %ld\n", num1);//结果:12345printf("num2 = %ld\n", num2);//结果:6719printf("num3 = %ld\n", num3);//结果:10return 0;
}

2. 使用 endptr 检测转换结果下载

#include <stdlib.h>
#include <stdio.h>int main() {const char* str = "123abc";char* endptr;long num = strtol(str, &endptr, 10);printf("转换的数字: %ld\n", num);    // 123printf("剩余字符串: \"%s\"\n", endptr); // "abc"printf("转换的字符数: %td\n", endptr - str); // 3return 0;
}

3. 错误处理

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <limits.h>int main() {const char* str1 = "99999999999999999999"; // 超出 long 范围const char* str2 = "invalid";char* endptr;errno = 0; // 重置错误标志long num1 = strtol(str1, &endptr, 10);if (errno == ERANGE) {printf("数值超出范围\n");if (num1 == LONG_MAX)printf("上溢发生\n");else if (num1 == LONG_MIN)printf("下溢发生\n");}errno = 0;long num2 = strtol(str2, &endptr, 10);if (endptr == str2) {printf("没有数字被转换\n");}return 0;
}

在原代码中的应用

outputArray[outputSize++] = strtol(byteStr, nullptr, 16);

这里的使用:

  • byteStr:包含两个十六进制字符的字符串(如 "1A")

  • nullptr:不关心结束位置

  • 16:明确指定十六进制转换

转换过程:

  • "1A" → 1*16 + 10 = 26 → 0x1A

  • "FF" → 15*16 + 15 = 255 → 0xFF

  • "00" → 0*16 + 0 = 0 → 0x00

相关函数家族

 
函数 返回类型 说明
strtol long 转换到长整数
strtoll long long 转换到长长整数
strtoul unsigned long 转换到无符号长整数
strtod double 转换到双精度浮点数
atoi int 简单转换(不检查错误)

重要注意事项

  1. 错误处理:总是检查 errno 和 endptr

  2. 边界检查:确保输入字符串以 null 结尾

  3. 进制选择:使用 0 让函数自动检测通常更安全

  4. 性能:比 atoi 慢但更安全,支持错误检测

strtol 是一个强大而灵活的函数,特别适合需要健壮错误处理的场景。

 
 
 
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

j永久网站重庆市公路建设信息网官网

文章目录 DAY7下降路径最小和最小路径和地下城游戏 DAY7 下降路径最小和 【题目描述】 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元…

.net做网站的方式深一网站建设招聘

最近在微信看到一篇文章介绍说批量将ppt文件转化为pdf文件&#xff0c;自己尝试了一下&#xff0c;后面想能否自己封装一个类&#xff0c;既能将ppt转换为pdf&#xff0c;而且能够将word转换为pdf&#xff0c;或者其他类型转化为pdf。花了半天时间研究和找资料&#xff0c;终于…

找个免费的网站wordpress源码买卖

作业1&#xff1a; 已知一个数组table,用宏定义求出数组元素的个数。 #define NUM sizeof(table)/sizeof(table[0]) 作业2&#xff1a; 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a&#xff0c;写两段代码&#xff0c;第一个设置a的bit3&#xff0c;第…

设计师做网站的流程html网页制作小刘在线课程

很多朋友都想在一台服务器上运行多个MySQL Instance&#xff0c;究竟怎么做呢&#xff1f;首先要明晰几个原理&#xff0c; 简称为mysqld读取my.cnf的顺序&#xff1a;第一搜&#xff0c;首先读取/etc/my.cnf&#xff0c;多实例这个配置文件不会存在。&#xff1a;-(第二搜&…

网站广告收费标准wordpress每段不同图片

在 Vue 3 中&#xff0c;Pinia 是一个状态管理库&#xff0c;旨在替代 Vuex&#xff0c;提供更简单和更直观的 API。Pinia 支持 TypeScript&#xff0c;且其设计更符合 Vue 3 的组合式 API。 安装 Pinia 首先&#xff0c;你需要安装 Pinia和pinia-plugin-persistedstate。可以…

哪个网站可以学做包包帝国备份王wordpress

来源&#xff1a;混沌巡洋舰 “问题”&#xff08;question&#xff09; 中包含一个非常美妙的词&#xff1a;“ 探索”&#xff08;quest&#xff09;。我太喜欢这个词了。——埃利威塞尔&#xff08;Elie Wiesel&#xff09;有些人常常感觉一些真相事关重大&#xff0c;自己应…

课程作业

课程作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/25rjjc这个作业的目标 介绍自己并确立课程目标姓名-学号 潘均昊 2023329301031自我介绍: 大家好,我是浙江理工大学2023级自动化1班的潘均昊,我是…

娄底网站建设79ld联通官网

写作背景 Glide 作为著名的图片加载框架&#xff0c;几乎每一个项目都使用到。笔者尝试通过别人的博客来了解 Glide 原理&#xff0c;但是每次都是看着看着就懵逼了&#xff0c;不是因为别人写的不好&#xff0c;而是 Glide 实在是太复杂了&#xff0c;于是决定自己撸一遍&…

网站托管什么意思多媒体网页设计教程

原文地址&#xff1a;http://android.xsoftlab.net/training/displaying-bitmaps/process-bitmap.html 我们在上节课Load Large Bitmaps Efficiently中讨论了BitmapFactory.decode*方法&#xff0c;说到了不应该在UI线程中执行读取数据的过程&#xff0c;尤其是从磁盘或者网络…

vs 2017网站开发php网站开发类型什么意思

文章目录题目描述思路 && 代码二刷最近一直在充电基础知识、维护 leetcode 总结博客 今天继续摸一摸新题目吧&#xff5e; 题目描述 感觉和 03. 无重复的最长子串 有点像&#xff0c;都是在字符串上用滑动窗口来找子串。并且都是属于那种&#xff0c;解决一次以后&…

海派虫网站推广软件wordpress跳转到登录页面代码

ES6是JavaScript的一个重要版本&#xff0c;其中包含了许多新的语法和特性&#xff0c;其中迭代器和生成器是其中非常重要的特性之一。本文将详细介绍迭代器和生成器的概念、用法以及注意事项。 目录 1. 是什么2. 为什么存在3. 怎么使用3.1 迭代器3.2 生成器3.3 for...of循环3…

昭通网站建设公司自己做的网站怎么放到网上去

图像像素存储形式  对于只有黑白颜色的灰度图&#xff0c;为单通道&#xff0c;一个像素块对应矩阵中一个数字&#xff0c;数值为0到255, 其中0表示最暗&#xff08;黑色&#xff09; &#xff0c;255表示最亮&#xff08;白色&#xff09; 对于采用RGB模式的彩色图片&#…

国庆七日赛训总结

前五天跟高中生听noi金牌选手讲课,打的是noip模拟赛,均分150左右。 倒是学到了不少新算法,收获颇丰。 后两天在提高组上课,打s组模拟赛 分别取得190和170,其中两次的t2都是能对,却遇到了除以0re和数组开小的问题…

免费试用网站制作设计说明书范文

用来查询农历年的代码&#xff0c;可能比较粗糙&#xff0c;希望不要太打击偶&#xff0c;哈哈。一&#xff0c;Console.java[用来获取控制台的输入]/*#()Console.java 20:40:25 2/2/2006控制台消息输入/输出。*/import java.io.*;import java.text.SimpleDateFormat;import ja…

湘乡网站seo北京搜索引擎优化主管

入门效果之浮雕 "浮雕"图象效果是指图像的前景前向凸出背景。常见于一些纪念碑的雕刻上。要实现浮雕事实上很easy。我们把图象的一个象素和左上方的象素进行求差运算。并加上一个灰度。这个灰度就是表示背景颜色。这里我们设置这个插值为128 (图象RGB的值是0-255)。同…

task2.c

task2.cinclude <stdio.h> int main() { double a, b, c; scanf_s("%lf%lf%lf" , &a, &b, &c); if (a + b > c and a + c > b and b + c > a)printf("能构成三角形\n"…

还有网站吗建域名做网站

auto的实际价值就是简化代码&#xff0c;类型很长时可以自动推导。也可以用typedef&#xff0c;main函数里面也能typedef&#xff0c;不一定要在全局定义。 &#xff08;1&#xff09;类型别名思考 随着程序越来越复杂&#xff0c;程序中用到的类型也越来越复杂&#xff0c;经…

SpringCloud实用篇02-(Nacos配置管理,Feign远程调用,Gateway服务网关) - a

SpringCloud实用篇02-(Nacos配置管理,Feign远程调用,Gateway服务网关) 目录SpringCloud实用篇02-(Nacos配置管理,Feign远程调用,Gateway服务网关)0.学习目标1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添…

网站备案后内容小米发布会完整版

CSS语法 1. CSS语法格式 通常情况下语法格式如下: 选择器{属性名:属性值;属性名:属性值;属性名:属性值;... }2. CSS添加方式 2.1 行内样式 直接将样式写在本行的标签内。 <h1><p style"font-size: 48px; color:red;";>行内样式测试</p></…

制作投票的网站青岛网络seo公司

Flutter Boost 是一个 Flutter 插件&#xff0c;它可以帮助开发者在原生应用和 Flutter 应用之间无缝跳转。以下是一些基本步骤&#xff0c;展示了如何使用 Flutter Boost 从原生&#xff08;Native&#xff09;页面跳转到 Flutter 页面。 ### 1. 配置 Flutter Boost 在你的 …