「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.mzph.cn/web/58092.shtml

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

相关文章

CTF压缩包破解神器bkcrack教程和详细使用过程

kali安装bkcrack教程和详细使用过程 1.bkcrack介绍&#xff1a;2.bkcrack功能&#xff1a;3.bkcrack安装&#xff1a;Linux-Kali下&#xff1a;测试&#xff1a;Windows下安装&#xff1a; 4.bkcrack的使用方法&#xff1a;4.1查看相关参数4.2恢复内部密钥从 zip 档案中加载数据…

基于Python的乡村居民信息管理系统【附源码】

基于Python的乡村居民信息管理系统 效果如下&#xff1a; 系统主页面 系统登录页面 管理员主页面 居民管理页面 政务学习页面 土地信息管理页面 个人信息管理页面 居民登陆页面 村委人员主页面 研究背景 随着信息技术的飞速发展和乡村振兴战略的深入实施&#xff0c;传统的乡…

UI设计公司—兰亭妙微—提供轨道交通行业UI设计

蓝蓝设计工作室2008年开始&#xff0c;2011年正式成立北京兰亭妙微科技有限公司&#xff0c;主创清华团队&#xff0c;专注软件和互联网ui设计开发&#xff0c;擅长企业信息化管理、监控、大数据软件UIUE咨询和设计开发服务。立足UI&#xff0c;一直在学习进步。交通行业UE UI解…

2-Ubuntu/Windows系统启动盘制作

学习目标&#xff1a; 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器&#xff0c;确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器&#xff0c;理解启动盘的使用场景和注意事项&#xff0c;…

Java项目管理与SSM框架介绍

Maven简介 Maven是一个项目管理工具。它可以帮助程序员构建工程&#xff0c;管理jar包&#xff0c;编译代码&#xff0c;完成测试&#xff0c;项目打包等等。Maven工具是基于POM&#xff08;Project Object Model&#xff0c;项目对象模型&#xff09;实现的。在Maven的管理下每…

CGAL生成简单形状

三角形 四边形 立方体 六面体 棱柱 锥体 二十面体 网格 Polyhedron _mesh;/**************三角形************/CGAL::make_triangle(K::Point_3(100, 0, 0), K::Point_3(0, 100, 0), K::Point_3(0, 0, 0), _mesh);CGAL::IO::write_polygon_mesh("F:/WORK/STL/triangle.stl…

江协科技STM32学习- P30 FlyMCU串口下载STLink Utility

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

【Python】【数据可视化】【商务智能方法与应用】课程 作业一 飞桨AI Studio

作业说明 程序运行和题目图形相同可得90分&#xff0c;图形显示有所变化&#xff0c;美观清晰可适当加分。 import matplotlib.pyplot as plt import numpy as npx np.linspace(0, 1, 100) y1 x**2 y2 x**4plt.figure(figsize(8, 6))# yx^2 plt.plot(x, y1, -., labelyx^2,…

提高后端接口性能的方法

个人bibilailai&#xff08;不喜请跳过&#xff09;&#xff1a;前几天参加的部门技术分享会&#xff0c;同事分享了一个内容为“提高接口性能的常见技巧”&#xff0c;个人觉得很有用&#xff0c;所以想在这里分享给大家&#xff0c;希望对刚入职场不久的兄弟姐妹们有所帮助。…

.net Core 使用Panda.DynamicWebApi动态构造路由

我们以前是通过创建controller来创建API&#xff0c;通过controller来显示的生成路由&#xff0c;这里我们讲解下如何不通过controller&#xff0c;构造API路由 安装 Panda.DynamicWebApi 1.2.2 1.2.2 Swashbuckle.AspNetCore 6.2.3 6.2.3添加ServiceAction…

服务器新建用户

文章目录 前言一、步骤二、问题三、赋予管理员权限总结 前言 环境&#xff1a; 一、步骤 创建用户需要管理员权限sudo sudo useradd tang为用户设置密码 sudo passwd tang设置密码后&#xff0c;可以尝试使用 su 切换到 tang 用户&#xff0c;确保该用户可以正常使用&#…

NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?

在智慧城市的建设中&#xff0c;各种先进的技术系统正发挥着越来越重要的作用。其中&#xff0c;NVR监测软件/设备EasyNVR作为一种高效的视频边缘计算网关&#xff0c;不仅能够实现视频数据的采集、编码和存储&#xff0c;还能与其他智慧城市系统进行深度集成&#xff0c;共同推…

【NOIP提高组】虫食算

【NOIP提高组】虫食算 C语言C &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 所谓虫食算&#xff0c;就是原先的算式中有一部分被虫子啃掉了&#xff0c;需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子&#xff1a; 43#98…

Lobe Chat:你的私人AI助理

有一天&#xff0c;一位程序员对他的朋友说&#xff1a;‘我希望有一个助手&#xff0c;能像我一样聪明&#xff0c;但不会吃饭、喝水和请病假。’朋友回答说&#xff1a;‘这很简单&#xff0c;你只需要一个智能聊天助手&#xff01;’于是&#xff0c;程序员便找到了 LobeCha…

【CAPL实战】LIN帧干扰的脚本实现

文章目录 1、帧头干扰响应linDisturbRespWithHeader1.1 函数功能1.2 参数说明1.3 代码实例1.4 执行结果 2、帧头干扰帧头linDisturbHeaderWithHeader2.1 函数功能2.2 参数说明2.3 代码实例 1、帧头干扰响应linDisturbRespWithHeader 1.1 函数功能 使用一个新的header帧头来干…

华为HarmonyOS打造开放、合规的广告生态 - 激励广告

场景介绍 激励广告是一种全屏幕的视频广告&#xff0c;用户可以选择点击观看&#xff0c;以换取相应奖励。 接口说明 接口名 描述 loadAd(adParam: AdRequestParams, adOptions: AdOptions, listener: AdLoadListener): void 请求单广告位广告&#xff0c;通过AdRequestPar…

自由学习记录(18)

动画事件的碰撞器触发 Physics 类的常用方法 RaycastHit hit; if (Physics.Raycast(origin, direction, out hit, maxDistance)) {Debug.Log("Hit: " hit.collider.name); } Physics.Raycast&#xff1a;从指定点向某个方向发射射线&#xff0c;检测是否与碰撞体…

【elkb】创建用户和角色

在使用中我们不能把超管的用户信息给到所有者&#xff0c;我们需要为不用的使用场景创建不同的用户。 登录管理员用户 打开管理页面 创建角色 点击角色&#xff0c;创建角色 填写角色信息 设置Kibana 权限 最后点击创建角色 创建用户 点击用户--->创建用户 填写信息 登录…

【论文复现】语言模型中的多模态链式推理

&#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐、摄影的一位博主。 &#x1f4d7;本文收录于论文复现系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初阶、C…

Mysql常用语法一篇文章速成

文章目录 前言前置环境数据库的增删改查查询数据查询所有条件查询多条件查询模糊查询分页查询排序查询分组查询⭐️⭐️关联查询关联分页查询 添加数据insert插入多条记录不指定列名(适用于所有列都有值的情况) 更新数据更新多条记录更新多个列更新不满足条件的记录 删除统计数…