C语言函数大全-- r 开头的函数

news2024/11/24 21:19:29

C语言函数大全

本篇介绍C语言函数大全-- r 开头的函数

1. raise

1.1 函数说明

函数声明函数功能
int raise(int sig);用于向当前进程发送指定的信号。

参数:

  • sig : 指定要发送的信号编号

返回值:

  • 如果调用成功,raise() 函数将返回 0
  • 否则,它将返回一个非零值。

1.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sigint_handler(int sig) {
    printf("Caught signal %d\n", sig);
    exit(0);
}

int main() {
    signal(SIGINT, sigint_handler);

    while (1) {
        printf("Doing something...\n");
        getchar();
        // check for interrupt signal
        raise(SIGINT);
    }

    return 0;
}

在上面的示例中,

  • 我们首先使用 signal() 函数设置了一个处理 SIGINT 信号的处理程序 sigint_handler()
  • 然后,在主循环中,我们随意输入一个字符后,就使用 raise() 函数向当前正在运行的进程发送 SIGINT 信号。当收到 SIGINT 信号时,程序将打印一条消息并退出。

注意: raise() 函数只能向当前进程发送信号,不能向其他进程发送信号。如果要向其他进程发送信号,可以使用 kill() 函数。

1.3 运行结果

在这里插入图片描述

2. rand

2.1 函数说明

函数声明函数功能
int rand(void);用于生成伪随机数

返回值:
每次调用它时会返回一个介于 0RAND_MAX 之间的伪随机整数。其中,RAND_MAX 是一个常量,表示返回值的最大值,通常为 32767

2.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    // 使用系统时间作为随机数种子初始化
    srand(time(NULL));

    // 生成并输出 10 个随机数
    for (int i = 0; i < 10; i++) {
        printf("%d\n", rand());
    }

    return 0;
}

注意:

  • 每次程序运行时,rand() 函数返回的随机数序列都是相同的。如果要生成不同的随机数序列,可以使用 srand() 函数提供的种子来初始化随机数发生器。
  • 由于 rand() 函数只能生成伪随机数,不能保证其真正的随机性。因此,在需要高度安全性的应用程序中,建议使用更加安全的随机数生成器,如 /dev/random/dev/urandom 等系统提供的硬件随机数生成器。

2.3 运行结果

在这里插入图片描述

3. read

3.1 函数说明

函数声明函数功能
ssize_t read(int fd, void *buf, size_t count);用于从文件描述符读取数据的函数。

参数:

  • fd : 要读取的文件描述符
  • buf : 存储读取数据的缓冲区
  • count : 要读取的字节数。

3.2 演示示例

#include <stdio.h>
#include <unistd.h>

#define BUFFER_SIZE 1024

int main() {
    char buffer[BUFFER_SIZE];
    ssize_t num_read;

    num_read = read(STDIN_FILENO, buffer, BUFFER_SIZE);
    if (num_read == -1) {
        perror("read");
        return 1;
    }

    printf("Read %ld bytes from standard input: %.*s", num_read, (int)num_read, buffer);

    return 0;
}

在上述的示例中,

  • 我们首先定义了一个大小为 BUFFER_SIZE 的字符数组 buffer
  • 然后使用 read() 函数读取标准输入【STDIN_FILENO 表示标准输入的文件描述符】中的数据到 buffer 中;
  • 最后将读取的结果输出到控制台上。

3.3 运行结果

在这里插入图片描述

4. realloc

4.1 函数说明

函数声明函数功能
void *realloc(void *ptr, size_t size);用于重新分配已经分配过内存的空间大小。

参数:

  • ptr : 指向已分配内存区域的指针
  • size : 需要分配的新内存大小

返回值:

  • 它会尝试重新调整已经分配给 ptr 指向的内存区域大小,并返回一个指向新内存起始地址的指针。
  • 如果无法分配新的内存,则返回空指针 NULL

注意: realloc() 函数并不保证原有的内存区域内容会被完全保留。当内存大小增加时,可能会分配新的内存并将原有的数据复制到新内存区域中;当内存大小减小时,则可能截断部分原有的数据。因此,在使用 realloc() 函数时,需要注意备份原有的数据,以免出现数据丢失的情况。

4.2 演示示例

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 分配 10 个整型变量的内存空间
    int *p = (int*) malloc(10 * sizeof(int));
    if (p == NULL) {
        printf("内存分配失败\n");
        exit(1);
    }

    // 更改为 20 个整型变量的内存空间
    int *q = (int*) realloc(p, 20 * sizeof(int));
    if (q == NULL) {
        printf("内存分配失败\n");
        exit(1);
    }

    // 输出新的内存地址
    printf("原内存地址:%p,新内存地址:%p\n", p, q);

    // 释放新分配的内存空间
    free(q);

    return 0;
}

在上面的示例中,

  • 我们首先使用 malloc() 函数分配了 10 个整型变量的内存空间,并判断是否分配成功。
  • 接着,我们使用 realloc() 函数将分配的内存空间大小扩充为 20 个整型变量,并判断是否分配成功。
  • 最后,我们输出了原有的内存地址和新的内存地址,并释放了新分配的内存空间。

注意: 在使用 realloc() 函数时,应该始终检查返回值,以确保分配内存空间成功,避免因内存不足或其他原因导致程序崩溃。另外,也应该避免过度使用 realloc() 函数,因为频繁地重新分配内存会影响程序性能。

5. rectangle

5.1 函数说明

函数声明函数功能
void rectangle( int left, int top, int right, int bottom);画一个矩形

参数:
left, top, right, bottom,它们分别表示矩形左上角和右下角的坐标。

5.2 演示示例

#include <graphics.h>

int main(void)
{
    int gdriver = DETECT, gmode;
    int left, top, right, bottom;

    initgraph(&gdriver, &gmode, "");

    left = getmaxx() / 2 - 50;
    top = getmaxy() / 2 - 50;
    right = getmaxx() / 2 + 50;
    bottom = getmaxy() / 2 + 50;

    rectangle(left,top,right,bottom);

    getch();
    closegraph();
    return 0;
}

5.3 运行结果

在这里插入图片描述

6. registerbgidriver

6.1 函数说明

函数声明函数功能
int registerbgidriver(void(*driver)(void));用于将BGI(Borland Graphics Interface)驱动程序注册到系统中

注意:
它必须在使用任何 BGI 图形函数之前调用。该函数接受一个指向驱动程序结构的指针作为参数,并返回一个整数值以指示是否成功注册了驱动程序。BGI 驱动程序主要用于支持 Borland C++IDE 环境下的图形绘制和显示操作,它们通常存储在一个单独的库文件中,例如 graphics.h 头文件需要使用的 BGI driver 位于 libbgi.a 文件中。

6.2 演示示例

#include <graphics.h>

int main()
{
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");
    registerbgidriver(EGAVGA_driver); // 注册EGAVGA驱动程序
    circle(100, 100, 50); // 绘制圆形
    getch(); // 等待用户输入
    closegraph(); // 关闭图形界面
    return 0;
}

6.3 运行结果

7. remove

7.1 函数说明

函数声明函数功能
int remove(char *filename);用于删除指定的文件

参数:

  • filename : 一个指向要删除文件的文件名的字符串指针

返回值:
返回一个整数表示操作是否成功

  • 如果文件成功删除,则返回 0
  • 否则,返回非零值以指示发生错误。

7.2 演示示例

#include <stdio.h>

int main()
{
    int result;
    char filename[] = "example.txt";
    result = remove(filename);
    if (result == 0)
    {
        printf("The file %s has been removed.\n", filename);
    }
    else
    {
        printf("Error deleting the file %s.\n", filename);
    }
    return 0;
}

7.3 运行结果

在这里插入图片描述
在这里插入图片描述

8. rename

8.1 函数说明

函数声明函数功能
int rename(char *oldname, char *newname); 用于重命名或移动文件。

参数:

  • oldname : 指定要更改的文件名
  • newname : 指定新文件名或包含新路径的新文件名

返回值:

  • 在执行成功时,该函数返回 0
  • 否则返回非零值以指示发生错误。

8.2 演示示例

#include <stdio.h>

int main()
{
    char oldname[] = "temp.txt";
    char newname[] = "tempnew.txt";
    int result;
    
    result = rename(oldname, newname);
    
    if (result == 0)
    {
        printf("The file has been renamed.\n");
    }
    else
    {
        printf("Error renaming the file.\n");
    }
    
    return 0;
}

8.3 运行结果

在这里插入图片描述

9. restorecrtmode

9.1 函数说明

函数声明函数功能
void restorecrtmode(void);将图形模式恢复到文本模式

9.2 演示示例

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    int gdriver = DETECT, gmode;
    int x, y;

    initgraph(&gdriver, &gmode, "");

    x = getmaxx() / 2;
    y = getmaxy() / 2;

    settextjustify(CENTER_TEXT, CENTER_TEXT);
    outtextxy(x, y, "Press any key to exit graphics:");
    getch();

    // 将图形模式恢复到文本模式
    restorecrtmode();
    printf("We're now in text mode.\n");
    printf("Press any key to return to graphics mode:");
    getch();

    // 返回图形模式
    setgraphmode(getgraphmode());

    settextjustify(CENTER_TEXT, CENTER_TEXT);
    outtextxy(x, y, "We're back in graphics mode.");
    outtextxy(x, y+textheight("W"), "Press any key to halt:");

    getch();
    closegraph();
    return 0;
}

9.3 运行结果

在这里插入图片描述

10. rewind

10.1 函数说明

函数声明函数功能
void rewind(FILE *stream);将文件指针 stream 指向的文件位置重置为文件开头,同时清除任何错误或文件结束标志。

10.2 演示示例

#include <stdio.h>

int main() {
    FILE *fp = fopen("tempnew.txt", "r");
    if (fp == NULL) {
        perror("Failed to open file");
        return 1;
    }
    
    // 读取文件内容
    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), fp)) {
        printf("%s", buffer);
    }

    printf("\n");
    
    // 将文件指针重置到开头
    rewind(fp);
    
    // 再次读取文件内容
    while (fgets(buffer, sizeof(buffer), fp)) {
        printf("%s", buffer);
    }
    
    fclose(fp);
    return 0;
}

在上述的示例中,

  • 我们首先打开一个名为 tempnew.txt 的文件;
  • 然后使用 fgets() 函数从文件中读取文本行,并输出内容;
  • 接着使用 rewind() 函数将文件指针重置到文件开头,并再次读取文件内容并输出;
  • 最后关闭文件,退出程序。

10.3 运行结果

在这里插入图片描述

在这里插入图片描述

11. rmdir

11.1 函数说明

函数声明函数功能
int rmdir(const char *path);用于删除一个空目录,即该目录必须为空。

参数:

  • path : 待删除的空目录路径

返回值:

  • 如果成功,则返回 0
  • 否则返回 -1,并设置 errno 错误码。

11.2 演示示例


在上述的示例中,

  • 我们首先创建一个名为 test 的目录;
  • 然后在其中创建两个文件 file1.txtfile2.txt
  • 接着使用 rmdir() 函数尝试删除该目录,但会失败,因为该目录不是空的。

注意: 如果要删除非空目录,可以使用上面的 remove() 函数来删除目录及其所有内容。

11.3 运行结果

在这里插入图片描述

12. round,roundf,roundl

12.1 函数说明

函数声明函数功能
double round(double x);将传入的实数参数 x 四舍五入为最接近的整数(double)
float roundf(float x);将传入的实数参数 x 四舍五入为最接近的整数(float)
long double roundl(long double x);将传入的实数参数 x 四舍五入为最接近的整数(long double)

12.2 演示示例

#include <math.h>
#include <stdio.h>

int main() {
    double x = 3.14159265;
    
    double rounded1 = round(x);     // 将 x 四舍五入为整数,结果为 3
    double rounded2 = round(x * 100) / 100;  // 将 x 精确到小数点后两位,结果为 3.14
    
    printf("rounded1: %lf\n", rounded1);
    printf("rounded2: %lf\n", rounded2);

    float xf = 2.5;
    printf("rountf(%f) = %f\n", xf, roundf(xf)); // 将 xf 四舍五入为整数,结果为 3
    
    long double xL = 2.4;
    printf("rountl(%Lf) = %Lf", xL, roundl(xL)); // 将 xL 四舍五入为整数,结果为 2
    return 0;
}

12.3 运行结果

在这里插入图片描述

13. remainder,remainderf,remainderl

13.1 函数说明

函数声明函数功能
double remainder(double x, double y);用于计算两个浮点数的余数(即模运算结果)(double)
float remainderf (float x, float y );用于计算两个浮点数的余数(即模运算结果)(float)
long double remainderl (long double x, long double y);用于计算两个浮点数的余数(即模运算结果)(long double)

参数:

  • x : 被除数
  • y : 除数

返回值: x/y 的余数

13.2 演示示例

#include <stdio.h>
#include <math.h>

int main() {
    double x = 10.5, y = 3.2;
    printf("remainder(%lf, %lf) = %.20lf\n", x, y, remainder(x, y));


    float xf = 10.5f, yf = 3.2f;
    printf("remainder(%f, %f) = %.20f\n", xf, yf, remainderf(xf, yf));


    long double xL = 10.5L, yL = 3.2L;
    printf("remainder(%Lf, %Lf) = %.20Lf\n", xL, yL, remainderl(xL, yL));
    return 0;
}

13.3 运行结果

在这里插入图片描述

14. remquo,remquof,remquol

14.1 函数说明

函数声明函数功能
double remquo(double x, double y, int *quo);用于计算两个浮点数的余数,并返回商和余数。
float remquof(float x, float y, int *quo);用于计算两个浮点数的余数,并返回商和余数。
long double remquol(long double x, long double y, int *quo);用于计算两个浮点数的余数,并返回商和余数。

参数:

  • x : 被除数
  • y : 除数
  • quo : 返回商的指针。如果不需要返回商,则可以传递 NULL

返回值: 返回 x/y 的余数,并通过 quo 指针返回商。

14.2 演示示例

#include <stdio.h>
#include <math.h>

int main() {
    int quo;
    double x = 10.5, y = 3.2;
    double rem = remquo(x, y, &quo);
    printf("remquo(%lf, %lf, quo) = %.20lf, quo = %d\n", x, y, rem, quo);

    float xf = 10.5f, yf = 3.2f;
    float remf = remquof(xf, yf, &quo);
    printf("remquof(%f, %f, quo) = %.20f, quo = %d\n", xf, yf, remf, quo);

    long double xL = 10.5L, yL = 3.2L;
    long double remL = remquol(xL, yL, &quo);
    printf("remquol(%Lf, %Lf, quo) = %.20Lf, quo = %d\n", xL, yL, remL, quo);

    return 0;
}

14.3 运行结果

在这里插入图片描述

15. rint,rintf,rintl

15.1 函数说明

函数声明函数功能
double rint(double x);将 x 四舍五入到最接近的整数(double)
float rintf(float x);将 x 四舍五入到最接近的整数(float)
long double rintl(long double x);将 x 四舍五入到最接近的整数(long double)

15.2 演示示例

#include <stdio.h>
#include <math.h>

int main() {
    double d = 3.7;
    float f = 2.4f;
    long double ld = 5.9L;

    printf("rint(%f) = %.1f\n", d, rint(d));   // Output: rint(3.700000) = 4.0
    printf("rintf(%f) = %.1f\n", f, rintf(f)); // Output: rintf(2.400000) = 2.0
    printf("rintl(%Lf) = %.1Lf\n", ld, rintl(ld)); // Output: rintl(5.900000) = 6.0

    return 0;
}

15.3 运行结果

在这里插入图片描述

参考

  1. [API Reference Document]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467209.html

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

相关文章

霍兰德人格分析雷达图

雷达图 Radar Chart 雷达图是多特性直观展示的重要方式 问题分析 霍兰德认为&#xff1a;人格兴趣与职业之间应有一种内在的对应关系 人格分类&#xff1a;研究型、艺术型、社会型、企业型、传统型、现实性 职业&#xff1a;工程师、实验员、艺术家、推销员、记事员、社会工…

【AUTOSAR】【信息安全】SecOC

目录 一、概述 二、约束和假设 三、依赖模块 四、功能描述 4.1 安全解决方案的规范 4.1.1 安全解决方案的基本实体 4.1.2 安全的I-PDU构建 4.1.3 安全的I-PDU验证 4.2 与PduR的关系 4.3 初始化 4.4 传出PDU的身份验证 4.5 传入pdu的验证 4.6 网关功能 4.7 多核分…

【java】Java中的锁

文章目录 前言一、悲观锁二、乐观锁三、自旋锁原理自旋锁优缺点优点缺点 自旋锁时间阈值(1.6 引入了适应性自旋锁)自旋锁的开启 四、可重入锁(递归锁)五、读写锁六、公平锁七、非公平锁八、共享锁九、独占锁十、轻量级锁十一、重量级锁十二、偏向锁十三、分段锁十四、互斥锁十五…

Docker实战笔记5-利用 commit 理解镜像构成

转载请标明出处&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/130338433 本文出自【赵彦军的博客】 文章目录 慎用 docker commit 注意&#xff1a; docker commit 命令除了学习之外&#xff0c;还有一些特殊的应用场合&#xff0c;比如被入侵后保存现场等。但…

【软件测试】测试用例的设计

文章目录 一. 针对没有需求的案例来设计测试用例二. 针对有需求的案例来设计测试用例1. 穷举法2. 等价类3. 边界值4. 判定表法5. 场景设计法5.1 简介5.2 基本设计步骤5.3 基本流和备选流5.4 使用场景5.5 优缺点5.6 实例 6. 错误猜测法 一. 针对没有需求的案例来设计测试用例 针…

网络安全入行?来了解下网络安全从业人员类别及其工作任务

又到了每年重保期间&#xff0c;红蓝双方都开始进行准备蓄势待发&#xff0c;网络安全从业人员每年供不应求&#xff0c;尤其是重保期间&#xff0c;双方都在疯狂的招揽准备网络安全人员。那网络安全从业人员分类到底有哪些&#xff0c;都负责哪些具体的工作任务呢&#xff1f;…

基于云计算技术的B/S架构云HIS 云HIS 云HIS系统

传统的HIS经历了20多年的建设&#xff0c;已经从单机版发展到局域网的版本&#xff0c;更被深入应用到医院的各项业务活动&#xff0c;成为医院必不可缺的基础设施平台&#xff0c;724小时不间断地支撑医院运行。因此医院都十分重视信息化建设。随着医改的不断推进和医疗行业的…

前端路由hash模式以及history模式详解

文章目录 前言一、hash 模式1、hash 定义2、location 对象3、window.onhashchange 事件 二、history 模式1、history 定义2、history API3、window.onpopstate 事件4、解决history模式下页面刷新404问题 前言 在前后端分离的项目中&#xff0c;前端一般使用 SPA 单页面应用模式…

屌的一批,阿里P8推荐的Spring Cloud实战笔记

Spring Cloud 前世今生 Spring Cloud体系由Spring 在2015年年初推出&#xff0c;至今已经五年多&#xff0c;其子项目在不断增加与完善&#xff0c;其所包含的功能点已经基本满足整个微服务体系的需求。加上Spring本身强大的技术后盾和活跃的技术社区氛围&#xff0c;Spring C…

车载毫米波雷达中国市场有望在2025年实现30亿美元的市场规模

近日&#xff0c;专注于前沿科技领域的国际咨询机构ICV发布了全球车载毫米波雷达的市场研究报告&#xff0c;汽车毫米波&#xff08;mmWave&#xff09;雷达基于频率为77 GHz的电磁波&#xff0c;具有高精度和准确性&#xff0c;可用于目标检测。这种技术有着广泛的应用&#x…

解决方案丨票据集中在集团总部处理,如何解决实物票据管理难?

目前越来越多的企业都成立了财务共享中心&#xff0c;通过统一财务中心可以进行集中式、标准化、统一化管理&#xff0c;提升财务运营水平与效率、降低企业的整体运作成本、集团战略发展支撑。 如何确保财务共享中心稳健和高效运营&#xff0c;是很多企业建立共享中心后面的难…

【Leetcode每日一刷】动态规划:931. 下降路径最小和

博主简介&#xff1a;努力学习的22级计科生博主主页&#xff1a; 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 目录 一、动态规划套路二、分析1、dp数组含义2、确定递推公式&#xff08;递推函数的实现&#xff09;3、dp数组初始化&#xff08;base case)4、遍历顺序 解题…

React面向组件编程

React面向组件编程 基本理解和使用组件三大核心属性1: state效果理解强烈注意 组件三大核心属性2: props效果理解作用编码操作 组件三大核心属性3: refs与事件处理效果理解编码2.4.4. 事件处理 收集表单数据效果理解 组件的生命周期(重要&#xff09;效果理解生命周期流程图(旧…

《庖丁解牛Linux内核分析》课后实验:实验一:反汇编分析

实验内容 参照第 1.3 节&#xff0c;将如下 C 语言代码汇编成“.s”文件&#xff0c;并分析“.s”文件中的汇编代码 的执行过程&#xff0c;其中重点关注 EBP/ESP 寄存器、EAX 寄存器、EIP 寄存器和函数调用堆栈空 间在汇编代码的执行过程是如何变化的。 int g(int x) { return…

省钱!NewBing硬核新玩法;手把手教你训练AI模特;用AI替代同事的指南;B站最易上手AI绘画教程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『NewBing 的2种硬核新用法』阅读文档并回答问题 & AI绘图 社区同学分享了两种NewBing的新用法&#xff0c;不仅准确高效&#x…

2023年湖北省武汉安全员ABC报名时间考试通过率如何?启程别

2023年湖北省武汉安全员ABC报名时间考试通过率如何&#xff1f;启程别 都2023年了&#xff0c;建筑企业想要报考三类人员&#xff0c;不知道在哪里报名&#xff0c;具备什么样的条件才可以报考建筑安全员abc,什么时间报名考试等等一系列问题&#xff0c;启程别来给你们细细说明…

即时通讯源码自己开发好还是对接云服务好

随着科技的飞速发展&#xff0c;通信技术也日新月异。与此同时&#xff0c;即时通讯应用也越来越受欢迎。许多企业在构建应用程序时会遇到一个问题&#xff1a;使用即时通讯源码自己开发好还是对接云服务好&#xff1f;本文将探讨这两种方法的优缺点&#xff0c;并为您提供一些…

环境配置 | Win10 VSCode连接远程服务器里的docker容器

环境&#xff1a;win10, VS code, 远程服务器Ubuntu16.04&#xff08;远程服务器上已经安装好了dockers&#xff09;, 1.VScode下载 网址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 下载后双击运行 2.VSCode上配置 STEP 1.点击vscode右边工具栏点击拓展…

《嵌入式系统的WEB开发》

硬件平台&#xff1a;RK1109/T31/RK3308 软件系统&#xff1a;Linux&#xff0c;Lighttpd/ Nginx, FCGI, HTML/JS 选择使用FCGI&#xff0c;除了使用C 开发调用系统资源方便外. FCGI 可以解决CGI 多入口的问题&#xff0c;统一的入口&#xff0c;对数据同步&#xff0c;都是比…

Python 基于 Django 的学生成绩管理系统,可视化界面(附源码,教程)

1简介 对于学生成绩管理系统&#xff0c;充分运用现代化的信息技术手段&#xff0c;对于学生成绩信息管理发展的趋势就是信息化&#xff0c;信息化时代下的信息管理&#xff0c;需要深化信息管理体制与手段的改革&#xff0c;充分运用信息化手段来全方位的进行学生成绩管理系统…