C/C++笔试必须熟悉掌握的头文件系列(三)——stdlib.h/cstdlib

2023-05-16

##1. 说明
  “stdlib.h”头文件即标准库头文件(standard library),stdlib 头文件里包含了C语言的最常用的系统函数。而C++中有对应相同作用的“cstdlib”头文件,当然C++中两个头文件都可以使用,C++向C兼容。
  这个头文件经常和标准输入输出头文件(stdio.h)弄混,其实很简单,从文件名就可以很容易辨析,stdlib(standard library)主要是声明定义了一些通用的系统函数(定义了五种类型、一些宏和通用工具函数)。而stdio(standard input & output)则是定义了一些标准输入输出函数接口,包括编译平台和文件等输入输出函数。
  “stdlib.h”中包含:
  五种类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;
  宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等;
  常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等。
##2. 笔试必掌握内容  
  五种类型和宏声明了解就行,而stdlib库中包含的一些通用系统函数还是很实用的。如果运用得当,会给你面试编程节省很多时间,并且让你程序看上去不那么臃肿。下面介绍一下stdlib头文件中需要掌握的函数:
1. malloc()/free()
  这两个函数接口分别是C/C++中用来动态申请空间和释放自己申请的空间的函数。例如笔试题中需要给输入数据动态申请一段地址空间来存储,这样就不会像数组开头固定一段空间,从而造成空间利用上的浪费。详细用法见下面例子:

char* nzArr = (char*)malloc(sizeof(char)*10);

free(nzArr);
nzArr = NULL;

  第一句动态申请了10个char类型大小的地址空间,由于malloc函数返回的是void类型,所以在赋给某个指针的时候需要强制转换。这里指针是指向char类型,所以转换到对应类型地址空间。最后释放完毕之后,最好再将指针赋值给NULL,否则容易造成野指针的现象。
  关于动态申请空间详细的介绍可以参考这篇博文:

http://blog.csdn.net/fx677588/article/details/52650101 关于C/C++动态申请空间释放和内存泄漏问题介绍

2. rand()/srand()
  产生随机数函数,0到32767间的随机整数(0到0x7fff之间)。函数原型: int rand(void);
  下面介绍产生0-99随机数的方法:

int nRand = rand()%100;

  但是如果仅使用rand(),每次运行程序产生的随机数是一样的。所以需要结合srand(unsigned int send)为其提供种子seed。如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的。所以当结合time()设置种子点,每次运行会实实在在产生随机数。
  程序如下:

 #include<time.h>
 
 unsigned int send = (unsigned)time(NULL);//当前时间作为种子点
 srand(send);                             //为rand()提供种子点
 int x = rand()%100;                     //获取0-99随机数

3. 字符串数组转其它类型相关函数
  需要注意的是这里是字符串数组(char)转为其它类型数据,并不是C++“string”头文件中string类型转为其它类型数据。并且转换的字符串数组中串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。*
3.1 atof
  函数原型: double atof(char *str)
  函数功能: 将字符串转换成一个双精度数值
  函数返回: 转换后的数值
  参数说明: str-待转换浮点型数的字符串
3.2 atoi
  函数原型: int atoi(char *str)
  函数功能: 将字符串转换成一个整数值
  函数返回: 转换后的数值
  参数说明: str-待转换为整型数的字符串
3.3 atol
  函数原型: long atol(char *str)
  函数功能: 将字符串转换成一个长整数
  函数返回: 转换后的数值
  参数说明: str-待转换为长整型的字符串
3.3 strtol/strtof/strtod
  **函数功能:**分别是将字符串数组转换为长整数值、单浮点数、双浮点。
  函数原型:
     long int strtol(const char *nptr,char **endptr,int base);
     float strtof(const char *nptr, char **endptr);
     double strtod(const char *nptr,char **endptr);
  参数说明:
  strtol不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,base取值2~36。
  endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos; strtol(“123abc”, &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol(“ABCabc”, &pos, 10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。
  使用举例:

char *nzArr  = "   12356";
char *nzArr1 = "   123.22a56";
char *nzArr2 = "   21.222ab";
char *nzptr ;
long   lNum  = strtol(nzArr,&nzptr,10); //结果:12356
double dNum  = strtod(nzArr1,&nzptr);   //结果:123.22,nzptr指向a(未识别处)
double dAtof = atof(nzArr2);            //结果:21.222
int    nNum  = atoi(nzArr);             //结果:12356

##3. 包含的函数  
1.abort
  使程序立即非正常终止,一般不对缓冲区清仓。
2.abs/labs/llabs
  返回num的绝对值。
3.assert
  当表达式exp求值为0时,宏先向标准错误流stderr写错误信息,然后使程序非正常终止,否则,该宏无任何作用。当宏NDEBUG定义时,该宏的定义为空。
4.atexit
  使得程序终止时调用由func指针指向的函数。如果成功注册,则函数返回0值,否则返回非0值。最少应允许注册32个终止函数,被注册的函数以注册的反序调用。
5.atof/atoi/atol/atoll
6.bsearch
  函数对buf指向的已排序数组实施对分查找(binary search),返回与key指向的关键字匹配的第一个成员的指针。num说明数组中的元素数目,size指出每个元素占有的字节数。
7.div
  函数返回numerator/denominator操作的商和余数,返回值的结构类型是div_t,该结构有以下两个域:int quot; int rem。
8.exit
  该函数使程序立即正常终止,这意味着调用由atexit()注册的终止函数,并且清空和关闭任何打开的文件。
  环境支持时,exit_code值传给调用进程。
9._Exit
  该函数由C99增加。该函数类似于exit(),但有下列差别:
  没有调用atexit()注册的函数;
  没有调用signal()注册的信号处理程序;
  打开的文件不必清空或关闭。
10.getenv
  函数返回一个指针,指向实现定义的环境信息表中与name指向的串有关的环境信息。千万不要用代码修改该串。没有查到匹配数据时,返回空指针。
11.ldiv
  函数返回numerator/denominator操作的商和余数,返回值的结构类型是ldiv_t,该结构有以下两个域:long int quot; long int rem;
12.lldiv
  由C99增加,函数返回numerator/denominator操作的商和余数,返回值的结构类型是lldiv_t,该结构有以下两个域:long long int quot; long long int rem;
13.longjmp
  使程序在最近一次调用setjmp()处重新执行。status变成setjmp()的返回值。
14.qsort
  使用Quicksort算法对buf指向的数组进行排序,num是数组中元素的数目,size说明每个元素的大小(按字节)。
15.raise
  把signal指定的信息传入执行中的程序。成功时返回0,否则返回非0值。
16.rand/srand
  产生伪随机数序列,每次它被调用时返回一个0到RAND_MAX间的整数。RAND_MAX值至少是32767。
17.setjmp
  在缓冲区envbuf中保存系统堆栈的内容,供longjmp()以后使用。
18.signal
  注册由func指向的函数,作为signal所说明的信号的一个处理程序。
19.strtod/strtof/strtol/strtoll/strtold/strtoul/strtoull
  strtold该函数由C99增加,处理类似于strtod(),只是它返回long double型值。 strtoll该函数由C99增加。处理类似于strtol(),只是它返回long long int型值。strtoul,把start指向的串中的数字表达式转换为无符号长整数。执行过程类似于strtol()。strtoull该函数由C99增加。处理类似于strtoul(),只是它返回unsigned long long int型值。
20.system
  把str指向的串作为命令传入操作系统的命令处理程序。该函数与具体环境有关。
21.va_arg、var_copy、va_start及va_end


个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++笔试必须熟悉掌握的头文件系列(三)——stdlib.h/cstdlib 的相关文章

  • atcoder beginner contest 142 Disjoint Set of Common Divisors(质因数分解)

    题目大意 xff1a 找出A B中的所有互质的因数 解题思路 xff1a 首先 xff0c 我们必须找出因数 我们知道对gcd a b 进行因数分解就能得到a xff0c b的所有因数 但是这里需要互质的因数 xff0c 所以我们这里需要对
  • spring管理事务控制的问题

    在使用ssm框架开发项目时 xff0c 事务控制交由spring来管理 xff0c 然而在查看日志时发现一个问题 xff1a org mybatis spring SqlSessionUtils closeSqlSession SqlSes
  • 关于 Debian 系统

    Debian是什么 xff1f Debian 计划是一个致力于创建一个自由操作系统的合作组织 我们所创建的这个操作系统名为Debian 操作系统是使计算机运行的基本程序和工具的集合 xff0c 其中最主要的部分称为内核 xff08 kern
  • btrfs的子卷与快照功能--Linux下备份系统

    关于Btrfs 什么是Btrfs 以及它的性能 可以在许多地方查阅得到 这里要提到的是 Btrfs文件系统本身就是由子卷 Subvolumes 构成的 它的top level是由B tree结构的含有目录 文件和子卷等东西构成的子卷 而在t
  • c# 通过dotPeek调试.net源码

    1 安装dotPeek 2 设置dotPeek xff0c 开启pdb服务 3 设置VS xff0c 添加服务来源 取消仅我的代码 4 测试代码 xff0c 在Console WriteLine 打断点 xff0c 并按F11进入 注意 x
  • 超棒的离线文档阅读器:Zeal

    前言 xff1a 大家写代码的时候总会有些方法或者属性不太清楚 xff0c 这时候我们就会打开浏览器 xff0c 然后找官方api或者直接搜索引擎找对应问题 xff0c 无疑花费了大量的时间 所以 xff0c 你需要一个桌面应用Zeal x
  • UITabBarController标签控制器相关设置

    1 根据下标索引以及控制器索引显示需要显示的控制器 self selectedIndex 61 sender tag 100 self selectedViewController 61 VC 2 设置标签控制器下面的文字 这里是设置系统自
  • Node App: Note命令行应用程序

    此程序需安装npm 第三方库yargs 解析命令行参数 xff0c chalk 输出特定样式的文本 安装版本如下 xff1a chalk 4 1 1 yargs 17 0 1 Note 应用程序支持 4个命令 xff1a add 添加一个n
  • 怎么样用批处理来创建一个txt文件

    怎么样用批处理来创建一个txt文件 cd gt test txt cd 表示切换到当前目录 xff0c 这个命令没有任何作用 gt 是重定向符 xff0c 将当前输出重定向到文件 这个命令创建一个名为test txt的空文件
  • STM32F103寄存器方式点亮LED流水灯

    一 设计思路 本实验使用GPIOB GPIOC GPIOD这3个端口控制LED灯 GPIO 是通用输入输出端口的简称 xff0c 简单来说就是 STM32 可控制的引脚 xff0c STM32 芯片 的 GPIO 引脚与外部设备连接起来 x
  • 一步步CEF(2)之编译ceflicent

    一步步CEF xff08 1 xff09 之编译libcef dll wrapper lib已经提供了c 43 43 的静态库 xff0c 这次要将cefclient编译出来 这里要说明一下 xff0c 如果仅仅将cefclient编译的话
  • Java查找最长字符匹配子串

    1 比较两个字符串 xff0c 短的那一个先判断是否包含在长的字符串中 2 如果不在 xff0c 短的字符串子串长度 1 xff0c 从前往后移判断是否包含 xff0c 不包含继续此操作 public class getMaxStringT
  • Python,Anaconda环境安装配置

    文章目录 Python安装pip包管理 Anaconda安装conda包管理和环境管理Python3与Python2共存 xff08 Anconda3与Anaconda2共存 xff09 Jupyter notebook配置Jupyter
  • SVN提示E230001、E170013解决方案

    解决办法 1 Windows电脑打开cmd命令行 xff0c Mac电脑打开终端 2 输入如下命令 svn ls https 127 0 0 1 8888 svn XXXXXXXX 这里是项目的svn地址 他会提示你输入信息 xff0c 这
  • 记一次Nginx启动失败解决过程(环境:linux Ubuntu 16.04 64bit , ECS for Aliyun)

    背景 今天装了个jpress想弄个博客 xff0c 然后关了Nginx和uwsgi xff0c 启动了tomcat 使用80端口 xff0c 后来直接shutdown sh关闭tomcat后 xff0c 再次启动Nginx报了个错误 Job
  • Windows安装Qt在选择界面卡死解决方案

    Windows安装Qt在选择界面卡死解决方案 很简单的操作 xff1a 就是安装了有道词典 xff0c 退出有道词典 xff0c 再安装Qt 哈哈哈 xff0c 是不是很简单 xff0c 我也是摸索了半天才知道 xff0c 网上说的各种卸载
  • Linux之cmake3.6安装

    1 官网下载cmake 3 6 3 tar gz https cmake org files v3 6 cmake 3 6 3 tar gz 2 解压文件tar xvf cmake 3 6 3 tar gz xff0c 并修改文件权限chm
  • mysql 分组获取最新一条记录

    1 需求 按用户名分组 xff0c 获取最新插入的一条记录 2 模拟数据 span class token comment span span class token comment Table structure for user spa
  • 电脑连接树莓派出现问题--(putty,VNC,MobaXterm和远程桌面连接)

    以下解决方法与问题是基于我之前给树莓派写的一个开机自启动python脚本导致的问题所提出的 如果你从来没有给树莓派写过脚本 xff0c 那我的这篇博客对现在的你来说没有帮助 xff0c 不用浪费时间了 今天在用PC的Putty ssh方式连
  • STM32+ESP-07S+MQTT服务器实现数据上传和接收

    参考文章 xff1a https blog csdn net weixin 46144773 article details 128793578 https docs ai thinker com esp8266 sdk esp32下载工具

随机推荐

  • Python问题:AttributeError: ‘str‘ object has no attribute ‘decode‘

    具体报错情况 xff1a AttributeError Traceback most recent call last lt ipython input 29 7b65833fd81b gt in lt module gt 8 from k
  • mount.nfs报错

    mount nfs requested NFS version or transport protocol is not supported 今天在挂载nfs时遇到mount nfs requested NFS version or tra
  • VMware虚拟机安装win10 32位

    VM15 43 Win10 32位 前期准备安装过程 前期准备 VMware Workstation15官方版下载 xff1a https www onlinedown net soft 2062 htm Win10 32位镜像下载 xff
  • AttributeError: ‘str‘ object has no attribute ‘value‘

    属性错误 xff1a str 对象没有属性 值 这是我在用python读取excel单元格的时候遇到的报错 xff0c cell对象没有属性值 xff0c 说明我的语法返回的是cell单元格对象而并非单元格的值 这时候只需将iter row
  • 算法题:马走日(C++)

    题目 xff1a 总时间限制 1000ms 内存限制 1024kB 描述 马在中国象棋以日字形规则移动 请编写一段程序 xff0c 给定n m大小的棋盘 xff0c 以及马的初始位置 x xff0c y xff0c 要求不能重复经过棋盘上的
  • WSL2-ubuntu1804安装以及一些个人使用调整

    文章目录 前言一 WSL是什么 xff1f 二 启用WSL21 首先确定自己的windows系统版本2 打开系统的虚拟化等一大堆功能3 切换默认模式至WSL2 三 安装WSL虚拟机 Ubuntu18041 下载安装 方法1 Microsof
  • LVM精简卷(Thinly-Provisioned Logical Volumes)的扩容

    LVM精简卷 Thinly Provisioned Logical Volumes 如果被人偷偷的在生产中使用 xff0c 紧急故障处理的时候 xff0c 可以一下子给人干懵 并且在百度还不能搜索到完整可用的文档 LVM精简卷的存在给我的感
  • Mac 备份 time machine开启全速备份

    Mac 备份非常慢 如果你的 Mac 是第一次在这个上面进行备份 xff0c 第一次备份一般都很慢 xff0c 可以调节参数的方式将其调节为全速进行备份 xff0c 记得备份完后将其调整回来 xff0c 否则可能会导致你的电脑在正常使用的时
  • 关于下载 http://arduino.esp8266.com/stable/package_esp8266com_index.json 出错的解决方法

    在使用 Arduino 43 NodeMCU 进行编程时 xff0c 有时候会出现如题所述的错误 xff0c 出错的网址是首选项中的 附加开发板管理器网址 xff0c 其意义是使得 Arduino 能够在开发板选项里找到ESP8266这块开
  • ubuntu 安装 qemu 提示 ERROR: glib-2.40 gthread-2.0 is required to compile QEMU and ERROR: pixman >= 0.21

    首先我们使用 xff1a apt cache search glib2 看看应该安装哪个库 sudo apt get install libglib2 0 dev 继续使用 apt cache search pixman 看看应该安装哪个库
  • 如何进行探索式数据分析?

    与数据同行 已开通综合 数据仓库 数据分析 产品经理 数据治理及机器学习六大专业群 xff0c 加微信号frank61822701 为好友后入群 新开招聘交流群 xff0c 请关注 与数据同行 公众号 xff0c 后台回复 招聘 后获得入群
  • Linux 移动或复制文件(文件夹)

    Linux 移动或复制文件 xff08 文件夹 xff09 命令格式 xff1a cp rf home backup default Public Public 复制 home backup default Public文件夹 到当前文件夹
  • 手把手教你配置阿里云服务器搭建网站

    写在前面 出于好奇 xff0c 我用学生优惠租了一台阿里云服务器 xff0c 打算做一些Java web的开发 xff0c 但是毕竟是第一次接触这样的东西 xff0c 还是比较懵逼 xff0c 在这个过程中遇到了一些问题 xff08 肯定会
  • Python

    人机交互 1 input 是输入函数 xff0c 会将所有输入做一个字符串类型的处理 a 61 input 作用 xff1a 显示出括号内的东西 xff0c 并要求用户输入一个东西 xff0c 赋给a 如果要有输入提示 xff0c 要在括号
  • PHP学习笔记——wampserver安装步骤

    1 wampserver的安装 安装链接 xff1a wampserver安装链接 选择 64 exe为后缀的安装包 xff08 前提是64位系统机器 xff09 选择语言 xff1a English 同意协议 next 选择安装路径 ne
  • 微博粉丝走势监控

    前言 因为之前写过很多爬虫 xff0c 然后近期也是选秀节目比较多 xff0c 像创造营 xff0c 青春有你等 一般情况下微博粉丝的增长速度是节目组比较关注的数据之一 因此 xff0c 想做一个简单的粉丝监控平台 xff0c 话不多说 x
  • ubuntu系统下各个目录的一般作用

    1 这是根目录 xff0c 一个Ubuntu系统下只有一个根目录 2 root 系统管理员的目录 3 boot 系统启动文件 4 bin 存放系统程序 5 etc 存放系统配置方面的文件 6 dev 存放与设备有观点文件 xff0c 例如
  • C/C++中枚举类型enum使用

    1 说明 xff1a 枚举enum的出现 xff0c 主要是为了解决一些特定属性的赋值 xff0c 变量取值仅在一定有限范围内的问题 例如一年只有十二个月取值 xff0c 一个星期只有七天情况 xff0c 人的性别只有男女两种等 这些属性如
  • Matlab中save实现保存数据到mat文件的正确使用

    主要需要注意save savePath A 和 save savePath 39 KSD 39 两种写法的区别 1 普通保存在当前文件夹下 save matPath mat span class hljs literal A span B
  • C/C++笔试必须熟悉掌握的头文件系列(三)——stdlib.h/cstdlib

    1 说明 stdlib h 头文件即标准库头文件 xff08 standard library xff09 xff0c stdlib 头文件里包含了C语言的最常用的系统函数 而C 43 43 中有对应相同作用的 cstdlib 头文件 xf