C语言——标准函数库

article/2025/5/2 16:00:57

<stdlib.h>

算数:

1、函数abs和labs返回参数的绝对值

int abs( int value );

long int labs( long int value );

 2、函数div和ldiv做除法运算

div_t div( int numerator, int denominator );

ldiv_t ldiv( long int numer, long int denom );

       函数第一个参数为分子,第二个参数为分母。产生的结果用 div_t / ldiv_t 结构返回。结构包含的字段为:

int quot;   //商

int rem;   //余数

随机数:

       函数产生的随机数其实通过一定的计算产生的“伪随机数”。

int rand( void );

void srand( unsigned int seed );

排序和查找:

      qsort函数以升序的方式对数组中的数据进行排序(快速排序)。qsort是与类型无关的,可以对任意类型的数据进行排序。

void qsort( void *base, size_t n_elements, size_t el_size,

                 int (*compare)(void const *, void const * ));

      第一个参数指向待排序的数组,第二个参数指定数组中元素的数目,第三个参数指定单个元素的长度(以字符为单位)。第四个参数是一个函数指针,用于对需要排序的元素类型进行比较。通过传递一个指向合适的比较函数的指针,可以对任意类型值的数组排序。 

<math.h>

       常用 ANSI C 标准数学函数:

       基本的浮点型数学函数接收 double 型参数,返回值也是 double 型。在上述表格中的函数名加上 f 或者 l 就得到了其 float 型和 long double 型标准函数,如sqrtf () 和 sqrtl () 。

<string.h>

        函数的作用都是从 s2 指向的位置拷贝 n 字节(是字节数而非元素个数)到 s1 指向的位置,并且返回 s1 的值。区别在于函数 memcpy 使用了 restrict 关键字,这意味着使用 memcpy() 函数的前提是假设拷贝与被拷贝内存之间是没有重叠的。而 memmove 则无需这样的顾虑,memmove的拷贝过程类似于利用一个中间临时缓存区,先把数据拷贝到缓存区,再从缓存区拷贝数据到目的地。

void *memcpy( void * restrict s1, const void * restrict s2, size_t n );

void *memmove( void *s1, const void *s2, size_t n );

       s1 和 s2 的参数类型是 void * ,而 void * 类型的指针可以接收任意类型的指针,所以函数 memcpy 和 memmove 可以实现任意类型的数组的拷贝。(函数 strcpy() 和 strncpy() 只能用于处理字符数组。)

        函数memcpy() 不知道也不关心数据的类型,更不会做类型转换,它只会做字节拷贝工作。而通过循环(利用循环按下标依次赋值)把一个数组中的值赋给另外一个数组时,在赋值的过程中是会做数据类型转换的。

<stdarg.h>

可变参数

        实现一个可接收可变参数的函数的步骤:

1.提供一个使用省略号的函数原型(形参列表中至少有一个形参和一个“…”,且省略号在最后);

2.在函数体中定义一个 va_list 类型的变量;

3.使用 va_start() 宏把该变量初始化为一个参数列表;

4.使用 va_arg() 宏访问参数列表;

5.使用 va_end() 宏完成清理工作。

        传给“…”左边第一个的参数用于指明省略号部分参数的个数(如下面的参数“ lim ”):

//实现参数求和,lim 为待求和参数的数目

double sum( int lim, … )

{

        va_list ap;//声明一个对象 ap 用于存储参数

        double tot = 0;

     

        va_start( ap, lim );//把 ap 初始化为参数列表

        for( int i; i < lim; i++ )

        {

                tot += va_arg( ap; double );//访问参数列表中的每一项

        {

        va_end( ap );//清理工作,接收的参数是个 va_list 类型的对象

        return tot;

}

打印可变参数列表 

        下面这组函数用于打印可变参数列表,使用前需要包含头文件<stdio.h>和<stdarg.h>

int vprintf( char const *format, va_list arg );

int vfprintf( FILE *stream, char const *format, va_list arg );

int vsprintf( char *buffer, char const *format, va_list arg );

        这些函数与它们对应的标准函数基本相同,这是它们使用了一个可变参数列表。在调用这些函数之前,arg参数必须使用 va_start 进行初始化。   

<time.h>

处理器时间:

      clock函数返回从程序开始执行起,处理器所消耗的时间。

clock_t clock( void );

当天时间:

      time函数返回当前的时间和日期。

time_t time( time_t *returned_value );

日期和时间的转换:

char *ctime( time_t const *time_value );

      ctime函数的参数是一个指向 time_t 的指针,并返回一个指向字符串的指针。字符串的格式如下:

      Sun Jul 4 04:02:48 1976\n\0

<assert.h>

断言

        断言就是声明为真。ANSI C实现了一个assert宏,用来调试程序,原型如下:

void assert( int expression );

        代码执行时,assert宏对表达式参数进行测试。若值为0(假),则assert宏就向标准错误打印一条诊断信息并终止程序(错误信息包含表达式和源文件的名字以及断言所在的行号);若表达式值为非零(真),则不做任何处理,程序往下执行。

        例如:一个函数必须用一个不为NULL的指针参数进行调用,那么可以用assert验证:

assert( value != NULL );

        assert只适用于验证必须为真的表达式。程序完整地测试完毕后,不必挨个将源文件中的断言删除,只需在源文件包含头文件<assert.h>之前加上定义 #define NDEBUG 即可使断言不生效。

        


http://chatgpt.dhexx.cn/article/ZTTmNBO2.shtml

相关文章

Qt中调用C语言函数库

接着上一篇文章&#xff0c;试图画出速度模型时&#xff0c;中间会有用到调用C库函数--gsl库&#xff1b;记一下怎么使用的&#xff1a; 和C语言中类似&#xff0c;但要使用到条件编译&#xff1a; #ifdef __cplusplus extern "C" { #endif #include <gsl/gsl_…

c语言标准函数库怎么建立教程,C语言-基础教程-C语言函数库和文件

一个函数设计完后&#xff0c;我们可以用三种方法处理它&#xff1a;1)把它放在main()函数的同一个文件中&#xff1b;2)把它和写好的其它函数一起放在另一个文件中&#xff1b;3)把它放在函数库中。下面分别讨论这三种方法。 4.6.1程序文件的大小 因为C语言允许分别编译&#…

C语言字符串处理函数库

C语言的字符串处理函数库包括复制函数、拼接函数、比较函数、搜索函数等&#xff0c;这些函数的声明都位于头文件<string.h>。使用这些函数时&#xff0c;需要使用#include<string.h>指令将头文件包含到文件中。 复制函数 复制函数的功能是将字符&#xff08;节&…

C语言数学函数库

数学函数库 几乎所有语言都会提供数学函数库&#xff0c;数学函数库起码包含幂&#xff0c;对数、三角函数等最基本的运算&#xff0c;C对于基本数学函数还算全面&#xff0c;如下表&#xff1a; 使用数学函数库需要导入math.h&#xff0c;表中所有参数和返回值都是double&am…

c语言常用库函数

c语言常用库函数 1、数学函数 abs 原型&#xff1a;extern int abs(int x); 功能&#xff1a;求整数x的绝对值 说明&#xff1a;计算|x|, 当x不为负时返回x&#xff0c;否则返回-xfabs 原型&#xff1a;extern float fabs(float x); 功能&#xff1a;求浮点数x的绝对值 说明&…

简单实现破解Root密码

破解步骤&#xff1a; 在系统启动时进入grub选项菜单 在grub选项菜单按e进入编辑模式 编辑kernel那行 添加 /init 1 &#xff0c;相当于告诉linux下次启动启用单用户模式这个特殊模式启动。 按b重启 进入系统后&#xff0c;将root密码设置为空密码。 #vim /etc/passwd …

vue-admin-beautiful-pro源码、vue admin pro、vue admin plus 基于element-plus的vue3.0 admin前端框架

Vue Admin Plus已拥有四种布局&#xff08;画廊布局、综合布局、纵向布局、横向布局&#xff09;四种主题&#xff08;默认、海洋之心、绿茵草场&#xff0c;荣耀典藏&#xff09;&#xff0c;共计16布局主题种组合&#xff0c;满足所有项目场景&#xff0c;已支持常规bug自动修…

【Mockplus教程】安装Mockplus

MAC上安装Mockplus 1 下载 进入摩客官网桌面端下载页面&#xff0c;选择MAC版本下载&#xff1b; 2 安装 下载完成后&#xff0c;打开dmg包&#xff0c;将Mockplus图标拖动到Applications快捷图标上面即可完成安装。 整个过程见下方视频&#xff1a; 进入摩客官网桌面端下载页面…

VUE 使用 mock

mock使用背景 实际开发采用前后端分离形式&#xff0c;意味着后端API正在开发中&#xff0c;前端只需知道需要的数据格式即可进行开发&#xff0c;与后端开发同步进行。mock模拟后端提供api的调用&#xff0c;并返回数据。 mock使用步骤 1. 安装依赖 npm install mockjs 2…

抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用

抱歉&#xff0c;Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用 标签&#xff1a; 2018 一句话概括本文 分析定位排查下厨房APP检测手机是否安装了Xposed框架的方法&#xff0c;然后一步步 Hook掉对应代码&#xff0c;以此去掉恶心的重复弹出警告对话框。 引…

2022最新 vue中mock的使用步骤 亲测可用

第一步&#xff1a;在src目录下创建文件夹mock&#xff0c;mock下创建文件index.js存放mock数据 index.js代码&#xff1a; import Mock from "mockjs" // const chartData { // "Msg": "success", // "ResCode": 200, // …

Mock 使用方式 + 在 Vue 项目中使用 Mock

Mock Mock 介绍搭建测试项目mock.js 模拟数据的基础使用方式Vue 项目中使用 mock.js 拦截数据后端接口写好后&#xff0c;mock.js 的移除处理 写下博客用于自我复习、总结。 如有错误之处&#xff0c;请各位大佬指出。 学习资料来源于&#xff1a;尚硅谷 Mock 介绍 在前后端开…

尚硅谷Vue2.0+Vue3.0全套教程视频笔记 + 代码 [P051-100]

视频链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通_哔哩哔哩_bilibili P1-50&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频笔记 代码 [P001-050]_小白桶子的博客-CSDN博客 P51-100&#xff1a;当前页面 P101-135&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频…

VirtualXposed 免ROOT使用Xposed模块

免ROOT使用Xposed模块 一&#xff0c;下载工具 VirtualXposed 官网地址 或者 百度网盘 提取码&#xff1a;39hu 二&#xff0c;安装应用 安装完成打开VirtualXposed可以看到界面&#xff0c;点击下面圆圈就可以进入添加应用&#xff0c;模块管理&#xff0…

Vue.js 框架源码与进阶 - Vue.js 源码剖析 - 模板编译

文章目录 一、模板编译简介二、体验模板编译的结果三、Vue Template Explorer四、编译的入口函数五、模板编译过程5.1 compileToFunctions5.2 compile5.3 baseCompile5.3.1 baseCompile-AST5.3.2 baseCompile-parse5.3.3 baseCompile-optimize5.3.4 baseCompile-generate 5.4 模…

全栈低码开源框架 json-script-rule 配置说明

说明 配置主要分为映射信息配置和spring配置文件application的配置 映射信息 映射信息通常指的是所配置的po类与映射表的相关信息&#xff0c;通过相关注解来获取相关的静态信息&#xff0c;当然这里也可以通过其它的渠道来加载这些配置信息&#xff0c;如数据库、xml文件等…

全栈低码开源框架 json-script-rule 导入

说明 导入功能是将带有数据的excel文件上传后再通过程序导入到数据库&#xff0c;创建模型如下 Data public class JSRuleImport<A extends JSRuleAction<A>> implements IJSRuleActionModel<A>{/*** <p>导入excel对象&#xff0c;别名e* */JsonAlias…

Vue3 —— to 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本篇主要学习几个 api 及相关源码&#xff1a; toReftoRefstoRaw 一、toRef toRef(reactiveObj, key) 接收两个参数&#xff0c;第一个是 响应式对象…

vue框架安装mock

mock是&#xff1a;通过随机数据,模拟各种场景。 开发无侵入 不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。 用法简单 符合直觉的接口。 1、安装mock前先安装axios请求 &#xff1a;** npm install axios --save** 安装成功axios的链接&#xff1a; 2、安装mo…

【甄选靶场】Vulnhub百个项目渗透——项目十六:FristiLeaks_1.3(文件上传,py脚本改写,sudo提权,脏牛提权,源码获取)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目十六&#xff1a;FristiLeaks_1.3&#xff08;文件上传&#xff0c;py脚本改写&#xff0c;sudo提权&#xff0c;脏牛提权&#xff0c;源码获取&#xff09; 靶场地址 &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透…