当前位置: 首页 > article >正文

「C/C++」C/C++标准库 之 #include<cstdlib> 通用工具函数库

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

    • C++中的<cstdlib>库:探索标准C库的功能
      • 一、内存分配与管理
      • 二、随机数生成
      • 三、环境访问
      • 四、整数运算
      • 五、其他实用函数
      • 六、总结

C++中的库:探索标准C库的功能

在C++编程中,头文件是一个非常重要的组成部分,它提供了对标准C库函数的访问。这些函数涵盖了内存分配、随机数生成、环境访问、整数运算以及其他一些实用的功能。尽管C++有自己的标准库,但仍然被广泛使用,因为它提供了一些在C++标准库中可能不那么直接可用的功能,或者是因为它们与C语言兼容,使得从C到C++的迁移更加容易。

一、内存分配与管理

库中的内存分配函数是malloccallocreallocfree。这些函数与C语言中的对应函数完全相同,用于在堆上动态分配和释放内存。

  • malloc(size_t size):分配指定大小的内存块,并返回一个指向该内存的指针。如果分配失败,则返回NULL
  • calloc(size_t num, size_t size):分配一个包含num个元素的数组,每个元素的大小为size字节,并将所有位初始化为0。返回一个指向分配内存的指针,如果分配失败,则返回NULL
  • realloc(void* ptr, size_t size):调整之前调用malloccallocrealloc分配的内存块的大小。ptr是指向旧内存块的指针,size是新内存块的大小。如果ptrNULL,则realloc的行为与malloc相同。函数返回指向新内存块的指针,如果分配失败,则返回NULL(此时旧内存块仍然有效)。
  • free(void* ptr):释放之前调用malloccallocrealloc分配的内存块。ptr是指向要释放的内存块的指针。如果ptrNULL,则free不执行任何操作。

二、随机数生成

库提供了两个函数用于生成随机数:rand()srand()

  • rand():返回一个伪随机数,其值在0到RAND_MAX之间(RAND_MAX是中定义的一个常量,通常为32767)。
  • srand(unsigned int seed):使用seed作为新的种子值来初始化随机数生成器。如果不调用srand,则每次程序运行时rand()都将生成相同的序列。

为了生成更大范围或特定分布的随机数,可以使用rand()的结果作为基础,并进行适当的缩放或变换。

三、环境访问

库提供了几个函数来访问与程序环境相关的信息。

  • getenv(const char* name):搜索环境变量name,如果找到,则返回一个指向该环境变量值的指针(一个以'\0'结尾的字符串)。如果未找到,则返回NULL
  • system(const char* command):将command传递给宿主环境(通常是操作系统)以执行。返回值取决于系统,通常为执行命令后的状态码。
  • abort():导致程序异常终止,并产生一个SIGABRT信号。它通常用于处理不可恢复的错误情况。
  • exit(int status):导致程序正常终止,并返回status给宿主环境。status通常用于指示程序是成功执行还是由于某种错误而终止。
  • atexit(void (*func)(void)):注册一个函数func,该函数将在程序正常终止时自动调用。atexit可以多次调用以注册多个函数,这些函数将按照它们被注册的顺序的反序被调用。

四、整数运算

库还提供了一些用于整数运算的函数,尽管这些函数在C++中通常不是必需的,因为C++运算符已经提供了这些功能。然而,在某些情况下,这些函数可能更有用或更易于理解。

  • abs(int j):返回整数j的绝对值。对于其他类型的绝对值(如longlong long等),需要使用相应的函数(如labsllabs等),这些函数在或的C语言对应头文件<stdlib.h>中可能不可用,而是定义在其他头文件中。
  • div(int numer, int denom):执行整数除法,并返回一个包含商和余数的div_t结构体。
  • ldiv(long numer, long denom):与div类似,但用于long类型的整数。
  • mbstowcs(wchar_t* dest, const char* src, size_t n)wcstombs(char* dest, const wchar_t* src, size_t n):这两个函数用于在宽字符(wchar_t)和多字节字符(char)之间进行转换。它们不是的标准部分,但通常与C标准库一起提供。

五、其他实用函数

  • bsearch(const void* key, const void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*)):在已排序的数组base中搜索与key匹配的元素。nmemb是数组中的元素数量,size是每个元素的大小(以字节为单位),compar是一个指向比较函数的指针,该函数用于确定两个元素的排序顺序。
  • qsort(void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*)):对数组base中的元素进行排序。nmembsizecompar参数与bsearch相同。

六、总结

库为C++程序员提供了一个访问标准C库函数的接口。这些函数涵盖了内存管理、随机数生成、环境访问、整数运算以及其他一些实用的功能。尽管C++有自己的标准库,但仍然被广泛使用,因为它提供了一些在C++标准库中可能不那么直接可用的功能,或者是因为它们与C语言兼容。在使用时,程序员应该注意C和C++之间的差异,特别是关于内存管理和类型安全的方面。


在这里插入图片描述


http://www.kler.cn/a/386538.html

相关文章:

  • 云防护单节点2T抗攻击能力意味着什么?
  • 数据分析那些事儿——关于A/B实验
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • 由于找不到mfc120u.dll, 无法继续执行代码。重新安装程序可能解决引问题。
  • 股市下跌时,期权市场的应对策略有哪些?
  • Kafka 快速入门(一)
  • hive表批量造数据
  • 08、Java学习-面向对象中级:
  • MySQL约束管理
  • 微服务day04
  • 技术速递|.NET 9 中 System.Text.Json 的新增功能
  • Linux命令 - linux索引节点、硬链接、软链接的介绍与使用
  • 一个简单ASP.NET购物车设计
  • 从0开始linux(24)——文件(5)磁盘文件系统
  • SpringBoot3中swagger无法使用
  • C#-密封类、密封方法
  • acmessl.cn提供接口API方式申请免费ssl证书
  • 第 2 章 - Go语言环境搭建
  • C++builder中的人工智能(16):神经网络中的SoftPlus激活函数
  • 网络安全应急响应(归纳)
  • AscendC从入门到精通系列(一)初步感知AscendC
  • 「Mac玩转仓颉内测版3」入门篇3 - Cangjie的基本语法与结构
  • rediss数据结构及其底层实现
  • C++代码优化(三): 决不要重新定义继承而来的缺省参数值
  • Android中桌面小部件的开发流程及常见问题和解决方案
  • Chrome与傲游在隐私保护上的表现