strtoul函数的使用

strtoul函数的使用文章详细介绍了 C 语言中的 strtoul 函数 包括其函数原型 工作原理以及如何处理不同进制的转换

大家好,欢迎来到IT知识分享网。


前言

在学习free type的时候遇到strtoul()函数的使用,记录一下学习结果


一、函数原型

unsigned long strtoul(const char* nptr, char** endptr, int base); nptr:要转换的字符串 endptr:一个指向字符指针的指针,用于指示转换结束后未使用的字符部分。如果为NULL,不会返回未使用的字符。 base:表示进制,可以是 0281016。如果设置为0,则根据字符串的前缀(0x或0X表示16进制,0表示8进制)来自动判断进制。否则,根据给定的进制进行转换。 

二、函数功能实现原理

  • strtoul 从字符串的开头开始扫描,跳过前导的空格字符(空格、制表符)
  • 遇到正负号,会自动解释为非法字符,停止扫描并返回0
  • strtoul将数字字符逐个转换为数字,并计算结果。遇到非数字字符,或达到字符串末尾,停止转换
  • 如果遇到非法字符,endptr 将指向该字符位置,除非 endptr 为NULL。
  • 如果没有转换任何数字字符,strtoul 返回0,并将 endptr 设置为 nptr 的值.

三、函数的测试代码

#include <stdio.h> #include <stdlib.h> int main() { 
      const char* str1 = " 12345abc789";//有前导、非数字字符  const char* str2 = "abc789";//有前导、非数字字符  const char* str3 = "+-abc789";//正负号判断对非法字符  const char* str4 = "abc";//2进制显示,到了2就开始非法,应输出B1001的十进制数值9  const char* str5 = "abc";//8进制显示 到了8就开始非法,应输出O的十进制数值  char* end; unsigned long str1_num , str2_num , str3_num , str4_num, str5_num; str1_num = strtoul(str1, &end, 10);//将字符串里的十进制数字返回给num  printf("str1 转换的数字字符: %lu\n", str1_num); printf("str1 剩余字符 : %s\n", end);//整个字符串的剩余部分  printf("\n"); str2_num = strtoul(str2, &end, 10);//将字符串里的十进制数字返回给num  printf("str2 转换的数字字符: %lu\n", str2_num); printf("str2 剩余字符 : %s\n", end);//整个字符串的剩余部分  printf("\n"); str3_num = strtoul(str3, &end, 10);//将字符串里的十进制数字返回给num  printf("str3 转换的数字字符: %lu\n", str3_num); printf("str3 剩余字符 : %s\n", end);//整个字符串的剩余部分  printf("\n"); str4_num = strtoul(str4, &end, 2);//2进制 进制表示的是字符串里的数字是什么进制  printf("str4 转换的数字字符: %lu\n", str4_num); printf("\n"); str5_num = strtoul(str5, &end, 8);//8进制 进制表示的是字符串里的数字是什么进制  printf("str5 转换的数字字符: %lu\n", str5_num); return 0; } 运行结果: str1 转换的数字字符: 12345 str1 剩余字符 : abc789 str2 转换的数字字符: 0 str2 剩余字符 : abc789 str3 转换的数字字符: 0 str3 剩余字符 : +-abc789 str4 转换的数字字符: 9 str5 转换的数字字符:  

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120289.html

(0)
上一篇 2025-10-30 18:33
下一篇 2025-10-30 18:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信