「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.rhkb.cn/news/463990.html

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

相关文章

pycharm调用方法时显示为灰色

不用担心&#xff0c;亮的证明是被用过得&#xff0c;灰色的没有被用&#xff0c;引用一下就会变正常了

机器学习:我们能用机器学习来建立投资模型吗

机器学习模型能解决什么投资问题&#xff1f; 利用机器学习解决投资问题的思路&#xff0c;其实和在互联网领域解决推荐、广告问题的思路是一样的&#xff0c;只不过利用的特征完全变了。推荐、广告模型利用的是用户的年龄、性别&#xff0c;物品的类别、价格等特征&#xff0c…

ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力

新版本发布 ClkLog在上线近1年后&#xff0c;获得了客户的一致肯定与好评&#xff0c;并收到了不少客户对功能需求的反馈。根据客户的反馈&#xff0c;我们在今年三季度对ClkLog的版本进行了重新的规划与调整&#xff0c;简化了原有的版本类型&#xff0c;方便客户进行选择。 与…

【Java设计模式】16-26章

行为型模式&#xff1a; 第16章 12模板方法模式(Template) 16.1 豆浆制作问题 16.2 模板方法模式基本介绍 16.3 模板方法模式原理类图 16.4 模板方法模式解决豆浆制作问题 package com.atguigu.template;//抽象类&#xff0c;表示豆浆 public abstract class SoyaMilk {//模板…

上市公司环境信息披露质量评分数据王婉菁版(2008-2023年)噪声光污染辐射废水减排等治理

数据来源基础数据来源于上市公司年报、社会责任报告、环境报告以及证监会和统计局。时间跨度2008-2023区域跨度企业及行业层面 核心解释变量&#xff1a;环境信息披露质量&#xff0c;是由上市公司环境管理、负债、业绩于治理、披露载体等各项信息披露质量评分加总。 被解释变…

Llama 3.2 Vision Molmo:多模态开源生态系统基础

编者按&#xff1a; 视觉功能的融入对模型能力和推理方式的影响如何&#xff1f;当我们需要一个既能看懂图像、又能生成文本的 AI 助手时&#xff0c;是否只能依赖于 GPT-4V 这样的闭源解决方案&#xff1f; 我们今天为大家分享的这篇文章&#xff0c;作者的核心观点是&#xf…

el-table 滚动条重置 手动控制滚动条

最近在使用 el-table 的时候&#xff0c;出现一个问题&#xff1a; 表头过长的时候&#xff0c;会有左右滑动的操作&#xff0c;当我们把表格拉到最右侧&#xff0c;这个时候重新请求数据的话&#xff0c;表格位置还是在最右侧&#xff0c;不会恢复原位。 那我们想恢复原位&a…

Windows的MySQL开机自动启动问题

标题 问题描述 问题描述 在Windows系统中&#xff0c;我设置好了MySQL服务为自动启动&#xff0c;但在开机后发现MySQL服务任没有自动运行。我有点苦恼&#xff0c;每次连接MySQL&#xff0c;都要进入计算机管理&#xff0c;手动打开。 解决方法&#xff1a; 1.前提安装好MySQ…

私有化视频平台EasyCVR视频汇聚平台接入RTMP协议推流为何无法播放?

私有化视频平台EasyCVR视频汇聚平台兼容性强、支持灵活拓展&#xff0c;平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 有用户反馈&#xff0c;项目现场使用RTMP协议接入EasyCVR平台&#xff0c;但是视频却不…

Python小白学习教程从入门到入坑------第二十三课 封装(语法进阶)

面向对象的三大特征&#xff1a;封装、继承、多态 一、封装 1.1 何为封装 封装&#xff1a;在Python中指的是隐藏对象中一些不希望被外部所访问到的属性或者方法。将复杂的信息、流程给包起来&#xff0c;内部处理&#xff0c;让使用者只需要通过简单的操作步骤&#xff0c;…

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…

Vscode使用launch.json进行传参调试代码

目录 1 操作2 后记 1 操作 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","…

Fooocus图像生成软件本地部署教程:在Windows上快速上手AI创作

文章目录 前言1. 本地部署Fooocus图像生成软件1.1 安装方式1.2 功能介绍 2. 公网远程访问Fooocus3. 固定Fooocus公网地址 前言 本篇文章将介绍如何在本地Windows11电脑部署开源AI生图软件Fooocus&#xff0c;并结合Cpolar内网穿透工具轻松实现公网环境远程访问与使用。 Foooc…

#渗透测试#SRC漏洞挖掘#自动化脚本的编写01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

python 使用进程池并发执行 SQL 语句

这段代码使用了 Python 的 multiprocessing 模块来实现真正的并行处理&#xff0c;绕过 Python 的全局解释器锁&#xff08;GIL&#xff09;限制&#xff0c;从而在多核 CPU 上并发执行多个 SQL 语句。 from pyhive import hive import multiprocessing# 建立连接 conn hive.…

SpringBoot+VUE2完成WebSocket聊天(数据入库)

下载依赖 <!-- websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><!-- MybatisPlus --><dependency><groupId>com.ba…

电子电气架构 --- 车载诊断的快速入门

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

继承的内容

封装&#xff1a; 1.在类中&#xff0c;把数据和方法放在一起&#xff0c;只展示成员函数&#xff0c;不展示定义的数据为私有。 2.一个类型放到另一个类型里面&#xff0c;通过typedef成员函数调整&#xff0c;封装另一个全新的类型。相当于是一个包装。 继承&#xff1a; st…

设计模式之结构型模式---装饰器模式

目录 1.概述2.类图3.应用场景及优缺点3.1 应用场景3.2 优缺点3.2.1 优点3.2.2 缺点 4.实现4.1 案例类图4.2 代码实现4.2.1 定义抽象构建角色4.2.2 定义具体构建角色4.2.3 定义抽象装饰器角色4.2.4 定义具体装饰角色4.2.5 装饰器模式的使用 1.概述 装饰器模式是指在不改变现有对…

接口测试(十一)jmeter——断言

一、jmeter断言 添加【响应断言】 添加断言 运行后&#xff0c;在【察看结果树】中可得到&#xff0c;响应结果与断言不一致&#xff0c;就会红色标记