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

news2024/12/23 22:23:03

C语言函数大全

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

1. nan

1.1 函数说明

函数声明函数功能
double nan(const char *tagp);用于返回一个表示 NaN(非数值)的 double 类型数字

参数:

  • tagp : 指向字符串的指针;用于指定 NaN 数字的类型。如果不需要指定类型,则可以将该参数设置为 NULL。

1.2 演示示例

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

int main(void)
{
    double x = 0.0 / 0.0;  // 使用除 0 运算符来生成 NaN 数字
    printf("x: %f\n", x);

    double y = nan(NULL);  // 使用 nan() 函数来生成 NaN 数字
    printf("y: %f\n", y);

    return 0;
}

注意: NaN 数字具有一些特殊的属性,例如与任何数字进行比较都会返回 false,因此在实际编程中需要特别小心处理 NaN 的情况,避免出现异常结果

1.3 运行结果

在这里插入图片描述

2. nanosleep

2.1 函数说明

函数声明函数功能
int nanosleep(const struct timespec *req, struct timespec *rem);用于暂停当前进程的执行一段指定的时间。相比于 sleep() 函数,nanosleep() 函数可以精确地指定等待时间,以纳秒为单位。

参数:

  • req : 指向 timespec 结构体的指针,用于指定要等待的时间。timespec 结构体包含两个成员变量:tv_sec 表示等待时间的整数部分(秒),tv_nsec 表示等待时间的小数部分(纳秒)。如果 rem 参数不为 NULL,则在函数返回时,未完成的等待时间将被存储在 rem 指向的 timespec 结构体中。
  • rem : 未完成的等待时间

2.2 演示示例

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

int main(void)
{
    struct timespec req = { 0 };
    req.tv_sec = 2;         // 等待时间为 2 秒
    req.tv_nsec = 5000000;  // 加上 5 毫秒

    int ret = nanosleep(&req, NULL);
    if (ret == 0) {
        printf("nanosleep completed\n");
    } else {
        printf("nanosleep interrupted by signal\n");
    }

    return 0;
}

在上述的程序中,

  • 我们首先创建一个 timespec 结构体变量 req,用于指定等待时间。在本例中,我们将等待时间设置为 2 秒加上 5 毫秒。
  • 接着,我们调用 nanosleep() 函数,并传递 req 变量的地址作为第一个参数。如果函数执行成功(即完成了预定的等待时间),则返回值为 0,否则返回 -1
  • 最后,我们检查函数的返回值,以确定 nanosleep() 是否成功完成。如果返回值为 0,则表示函数已经完成了预定的等待时间;如果返回值为 -1,则说明函数被信号中断。在实际编程中,我们还可以通过检查 errno 变量来获取更具体的错误信息。

3. nearbyint,nearbyintf,nearbyintl

3.1 函数说明

函数声明函数功能
double nearbyint(double x);用于将一个浮点数四舍五入到最接近的整数值(double)
float nearbyintf(float x);用于将一个浮点数四舍五入到最接近的整数值(float)
long double nearbyintl(long double x);用于将一个浮点数四舍五入到最接近的整数值(long double)

3.2 演示示例

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

int main(void)
{
    double x = 2.3;
    double y = -1.8;

    double z = nearbyint(x);   // 将 2.3 四舍五入到 2
    double w = nearbyint(y);   // 将 -1.8 四舍五入到 -2

    printf("x: %lf, nearbyint(x): %lf\n", x, z);
    printf("y: %lf, nearbyint(y): %lf\n", y, w);

    float xf = 2.5;
    printf("xf: %f, nearbyintf(xf): %f\n", xf, nearbyintf(xf));

    long double xL = -1.3;
    printf("xL: %Lf, nearbyintl(xL): %Lf\n", xL, nearbyintl(xL));

    return 0;
}

注意: nearbyint() 函数对于 0.5 的情况具有特殊处理:如果要转换的数恰好与两个整数的距离相等,则按照偶数方向进行舍入(即选择更接近偶数的整数)。例如,如果要将 2.5 转换为整数,那么将近似到最接近的偶数 2,而不是 3。这种舍入方式称为 “银行家舍入法”“四舍六入五成双”

3.3 运行结果

在这里插入图片描述

4. nextafter,nextafterf,nextafterl

4.1 函数说明

函数声明函数功能
double nextafter(double x, double y);用于找出与给定的浮点数最接近的下一个浮点数(double)
float nextafterf(float x, float y);用于找出与给定的浮点数最接近的下一个浮点数(float)
long double nextafterl(long double x, long double y);用于找出与给定的浮点数最接近的下一个浮点数(long double)

参数:

  • x : 要查找其下一个浮点数的浮点数
  • y : 给定浮点数的目标值,表示前进方向。

返回值:

  • 如果 y 大于 x,则向正无穷方向查找;
  • 如果 y 小于 x,则向负无穷方向查找;如果 y 等于 x,则返回 y

4.2 演示示例

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

int main(void)
{
    double x = 1.0;
    double y = 2.0;

    printf("nextafter(%lf, %lf): %.20lf\n", x, y, nextafter(x, y));      
    printf("nextafter(%lf, %lf): %.20lf\n", y, x, nextafter(y, x));

    float xf = 2.0;
    float yf = 1.0;
    printf("nextafterf(%f, %f): %.20f\n", xf, yf, nextafterf(xf, yf));   

    long double xL = -1.2;
    long double yL = - 1.5;   
    printf("nextafterl(%Lf, %Lf): %.20Lf\n", xL, yL, nextafterl(xL, yL));      

    return 0;
}

注意: 由于计算机内部存储浮点数的方式是有限制的,因此在进行浮点数计算时可能会存在误差。在实际编程中,我们应该特别小心处理这些情况,避免出现异常结果。

4.3 运行结果

在这里插入图片描述

5. nexttoward,nexttowardf,nexttowardl

5.1 函数说明

函数声明函数功能
double nexttoward(double x, long double y);用于找出与给定的浮点数最接近、并朝着指定方向的下一个浮点数(double)
float nexttowardf(float x, long double y);用于找出与给定的浮点数最接近、并朝着指定方向的下一个浮点数(float)
long double nexttowardl(long double x, long double y);用于找出与给定的浮点数最接近、并朝着指定方向的下一个浮点数(long double)

参数:

  • x : 要查找其下一个浮点数的浮点数
  • y : 给定浮点数的目标值,表示前进方向。

返回值:

  • 如果 y 大于 x,则向正无穷方向查找;
  • 如果 y 小于 x,则向负无穷方向查找;如果 y 等于 x,则返回 y

5.2 演示示例

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

int main(void)
{
    double x = 1.0;
    long double y = 2.0;

    printf("nexttoward(%lf, %Lf): %.20lf\n", x, y, nexttoward(x, y)); 

    float xf = 3.2;
    printf("nexttowardf(%f, %Lf): %.20f\n", xf, y, nexttowardf(xf, y)); 

    long double xL = 1.9;
    printf("nexttowardl(%Lf, %Lf): %.20Lf\n", xL, y, nexttowardl(xL, y)); 

    return 0;
}

5.3 运行结果

在这里插入图片描述

6. newlocale

6.1 函数说明

函数声明函数功能
locale_t newlocale(int category_mask, const char *locale, locale_t base);用于创建并返回一个新的本地化环境变量,以便在不同的本地化设置之间进行切换。

参数:

  • category_mask : 指定了要创建的本地化环境变量包含哪些类别。可以使用下列常量按位或来指定:
    • LC_ALL_MASK:表示所有类别。
    • LC_COLLATE_MASK:表示字符串比较和排序规则。
    • LC_CTYPE_MASK:表示字符分类和转换规则。
    • LC_MESSAGES_MASK:表示本地化消息文本。
    • LC_MONETARY_MASK:表示货币格式。
    • LC_NUMERIC_MASK:表示数字格式。
    • LC_TIME_MASK:表示时间和日期格式。
  • locale : 指定了要使用的区域设置名称。如果为 NULL 或空字符串,则使用当前系统默认的本地化设置。
  • base : 指定了要基于的基础本地化环境变量。如果为 NULL,则使用 LC_GLOBAL_LOCALE

6.2 演示示例

#include <stdio.h>
#include <locale.h>

int main()
{
    // 创建一个新的本地化环境变量,用于解析德语字符串比较和排序规则。
    locale_t loc = newlocale(LC_COLLATE_MASK, "de_DE.UTF-8", LC_GLOBAL_LOCALE);

    // 在新的本地化环境变量下比较两个字符串,并输出比较结果。
    const char *str1 = "äbc";
    const char *str2 = "abc";
    int result = strcoll_l(str1, str2, loc);
    printf("%s %s %s\n", str1, (result < 0 ? "<" : (result > 0 ? ">" : "==")), str2);

    // 释放本地化环境变量
    freelocale(loc);

    return 0;
}

在上述程序中,

  • 我们首先使用 newlocale() 函数创建一个新的本地化环境变量 loc,以便比较和排序德语字符串。
  • 接着,我们使用 strcoll_l() 函数来在新的本地化环境变量下比较两个字符串 str1str2
  • 最后,我们输出比较结果,并使用 freelocale() 函数释放 loc 变量。

注意: 在实际编程中应该特别注意本地化设置对字符处理、货币格式、时间格式等方面的影响,避免出现不必要的错误。

7. nftw

7.1 函数说明

函数声明函数功能
int nftw(const char *dirpath, int (*fn)(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf), int nopenfd, int flags);用于递归遍历指定目录下的所有文件和子目录,并对每个文件或目录执行指定操作。

参数:

  • dirpath : 要遍历的目录路径
  • fn : 一个回调函数,用于在遍历过程中对每个文件或目录执行指定操作。该函数的参数如下:
    • fpath : 当前文件的完整路径。
    • sb : 当前文件的 struct stat 结构体指针,包含了当前文件的各种属性信息。
    • typeflag : 表示当前文件的类型,可能为以下值之一:
      • FTW_F:普通文件。
      • FTW_D:目录。
      • FTW_DNR:无法读取的目录。
      • FTW_NS:无法访问的文件(可能是因为权限问题)。
      • FTW_SL:符号链接。
      • FTW_DP:与 FTW_D 相同,但目录本身还未被访问。
      • FTW_SLN:符号链接,指向不存在的文件。
    • ftwbuf : 一个 struct FTW 结构体指针,包含了一些关于遍历状态的信息。
  • nopenfd : 最大打开文件描述符数
  • flags : 控制遍历行为的标志位,可以使用下列常量按位或来指定:
    • FTW_CHDIR:进入目录后更改工作目录。
    • FTW_DEPTH:深度优先遍历。
    • FTW_MOUNT:不跨越文件系统边界。
    • FTW_PHYS:不跟随符号链接。

7.2 演示示例

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

static int count = 0;

int print_file_info(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
    // 打印文件路径和类型
    printf("%s ", fpath);
    if (typeflag == FTW_F) {
        printf("(file)\n");
    } else if (typeflag == FTW_D) {
        printf("(dir)\n");
    } else {
        printf("(other)\n");
    }

    // 计数器加一
    count++;

    return 0;
}

int main(void)
{
    int result = nftw(".", print_file_info, 10, FTW_PHYS);

    if (result == -1) {
        perror("nftw");
        exit(EXIT_FAILURE);
    }

    printf("Total files and directories: %d\n", count);

    return 0;
}

在上述的程序中,

  • 我们首先定义了一个回调函数 print_file_info(),用于打印每个文件或目录的路径和类型,并将计数器加一。
  • 接着,我们调用 nftw() 函数来递归遍历当前目录下的所有文件和子目录,并对每个文件或目录执行 print_file_info() 函数。
  • 最后,我们输出遍历总数。

注意: 在实际编程中应该特别注意文件访问权限等问题,以避免出现不必要的错误。

7.3 运行结果

在这里插入图片描述

8. nice

8.1 函数说明

函数声明函数功能
int nice(int inc);它是一个系统调用,可将进程截止到当前用户的最大优先级减少指定的优先级,以更改进程的调度优先级。较高的 niceness 值意味着较低的优先级。

参数:

  • inc : 要增加或减少的优先级值。如果 inc 的值为正数,则表示将进程的优先级降低;如果 inc 的值为负数,则表示将进程的优先级提高。通常情况下,只有具有 root 权限的进程才能将自己的优先级升高。

8.2 演示示例

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

int main(void)
{
    // 输出当前进程的初始优先级
    printf("Initial nice value: %d\n", nice(0));

    // 将进程的优先级减少 10
    int result = nice(10);
    if (result == -1) {
        perror("nice");
    } else {
        printf("New nice value: %d\n", result);
    }

    return 0;
}

在上述程序中,

  • 我们首先使用 nice(0) 函数输出当前进程的初始优先级;
  • 接着,我们使用 nice(10) 函数将进程的调度优先级降低 10
  • 最后将新的优先级值输出到终端。

注意: 由于 nice() 函数并不是标准 C 库中的函数,因此在编译时需要传递 -posix 参数或其他类似参数以启用 POSIX 标准。在实际编程中应该特别注意优先级修改对进程正常运行的影响,以避免出现不必要的错误。

9. nl_langinfo

9.1 函数说明

函数声明函数功能
char *nl_langinfo(nl_item item);它是一个 POSIX 标准函数,用于获取当前本地化环境下的语言环境信息。它可以返回一些与语言、货币、日期和时间格式等相关的信息。

参数:

  • item : 指定要获取的本地化信息。可以使用下列常量之一来指定:
    • ABDAY_*:星期缩写名称(0 ~ 6 表示周日到周六)。
    • DAY_*:星期全称(0 ~ 6 表示周日到周六)。
    • ABMON_*:月份缩写名称(0 ~ 11 表示一月到十二月)。
    • MON_*:月份全称(0 ~ 11 表示一月到十二月)。
    • AM_STR:上午字符串。
    • PM_STR:下午字符串。
    • D_FMT:日期格式字符串。
    • T_FMT:时间格式字符串。
    • ERA:纪元字符串。
    • ERA_D_T_FMT:带日期和时间的纪元字符串。
    • ERA_D_FMT:仅带日期的纪元字符串。
    • ERA_T_FMT:仅带时间的纪元字符串。
    • ALT_DIGITS:非十进制数字字符。

9.2 演示示例

#include <stdio.h>
#include <langinfo.h>

int main(void)
{
    char *time_fmt = nl_langinfo(T_FMT);
    char *date_fmt = nl_langinfo(D_FMT);

    printf("Time format: %s\n", time_fmt);
    printf("Date format: %s\n", date_fmt);

    return 0;
}

在上述的程序中,

  • 我们使用 nl_langinfo(T_FMT) 函数获取当前本地化环境下的时间格式字符串,并将其输出到终端。
  • 接着,我们使用 nl_langinfo(D_FMT) 函数获取当前本地化环境下的日期格式字符串,并将其输出到终端。

注意: 在实际编程中应该特别注意处理不同本地化环境下信息的差异,以避免出现不必要的错误。

10. nrand48

10.1 函数说明

函数声明函数功能
long nrand48(unsigned short xsubi[3]);用于生成带有指定状态的随机数。它使用 48 位整数来表示随机数的状态,可以方便地切换不同的随机数生成器状态。

参数:

  • xsubi : 一个包含 316 位无符号整数的数组,表示了当前随机数生成器的状态。如果想更改随机数生成器的状态,只需修改 xsubi 数组即可。

10.2 演示示例

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

int main(void)
{
    unsigned short seed[3];
    seed[0] = (unsigned short) time(NULL);
    seed[1] = (unsigned short) getpid();
    seed[2] = 12345;

    srand48(seed);

    printf("Random number: %ld\n", nrand48(seed));

    return 0;
}

在上述的程序中,

  • 我们首先创建了一个包含 316 位无符号整数的数组 seed,并将其用作随机数生成器的种子。
  • 接着,我们使用 srand48() 函数初始化随机数生成器,并使用 nrand48() 函数生成一个随机数,并将其输出到终端。

注意: 由于 nrand48() 函数生成的是伪随机数,因此在实际使用时需要注意选择足够复杂的种子,并采取适当的加密措施以避免出现不必要的安全问题。

11. ntohl,ntohs

11.1 函数说明

函数声明函数功能
uint32_t ntohl(uint32_t netlong);用于将网络字节序(大端序)转换为主机字节序(小端序)。
uint16_t ntohs(uint16_t netshort);用于将网络字节序(大端序)转换为主机字节序(小端序)。

参数:

  • netlong : 表示要转换的 32 位整数。
  • netshort : 表示要转换的 16 位整数。

11.2 演示示例

#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>

int main(void)
{
    uint32_t num1 = 0x12345678;
    uint16_t num2 = 0x5678;

    printf("Original value (hex):\n");
    printf("num1: %08X\n", num1);
    printf("num2: %04X\n", num2);

    num1 = ntohl(num1);
    num2 = ntohs(num2);

    printf("Converted value (hex):\n");
    printf("num1: %08X\n", num1);
    printf("num2: %04X\n", num2);

    return 0;
}

注意: 在实际编程中应该特别注意不同平台之间的字节序差异,以避免出现不必要的错误。

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

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

相关文章

Tomcat 配置与部署

http 协议就是 http 客户端和 http 服务器之间通信的协议 , 而Tomcat 就是 java 圈子中最广泛使用的 http 服务器. 下载Tomcat Tomcat官网 Tomcat 的版本 , 和后续的 servlet 版本是强相关的 , 此处使用 tomcat 8 , 对应的 servlet 就是 3.1 下载一个 zip 压缩包解压缩即可 T…

探索【Stable-Diffusion WEBUI】的插件:骨骼姿态(OpenPose)

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;骨骼姿态&#xff08;OpenPose&#xff09;系列插件&#xff08;二&#xff09;插件&#xff1a;PoseX&#xff08;三&#xff09;插件&#xff1a;Depth Lib&#xff08;四&#xff09;插件&#xff1a;3D …

Spring之IOC和DI入门案例

IOC和DI入门案例 1. IOC入门案例1.1 门案例思路分析1.2 实现步骤1.3 实现代码1.4 运行结果 2. DI入门案例2.1 DI入门案例思路分析2.2 实现步骤2.3 实现代码2.4 图解演示 1. IOC入门案例 问题导入 <bean>标签中id属性和class属性的作用是什么&#xff1f; 1.1 门案例思…

金三银四总计面试碰壁15次,作为一个27岁的测试工程师.....

3年测试经验原来什么都不是&#xff0c;只是给你的简历上画了一笔&#xff0c;一直觉得经验多&#xff0c;无论在哪都能找到满意的工作&#xff0c;但是现实却是给我打了一个大巴掌&#xff01;事后也不会给糖的那种... 先说一下自己的个人情况&#xff0c;普通二本计算机专业…

023:Mapbox GL加载mp4视频文件

第023个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载MP4视频文件。一个视频源。 “urls”值是一个数组。 对于数组中的每个 URL,将创建一个视频元素源。 要支持跨浏览器的视频,请提供多种格式的 URL。“坐标”数组包含按顺时针顺序列出的视频角的 [longi…

【MYSQL】数据库和表的基本操作

目录 1.mysql的工作图&#xff1a; 2.连接mysql服务器 3.mysql的配置文件 4.数据库的操作 5.表的操作 1.mysql的工作图&#xff1a; mysql是一个应用层服务&#xff0c;需要使用安装的mysql客户端&#xff08;也叫mysql&#xff09;连接mysql服务器&#xff08;也叫mysq…

Sa-Token源码简单阅读

一.权限登录模块包括几个基本子模块&#xff1a; 1.登录。 实现方式大致为&#xff1a;先检验用户名密码是否正确&#xff0c;如正确则在缓存中存入用户信息&#xff08;一般必须要有用户标识和访问token&#xff0c;或再加一些附加信息如用户的角色权限&#xff09;&#xf…

国内外4款主流ERP系统评测,哪款最好用?

一、ERP系统的概念 ERP系统&#xff0c;是针对通用各个企业特点研发的ERP软件。由于行业产品结构复杂&#xff0c;导致原料种类众多&#xff0c;制造工艺复杂&#xff0c;外加客户、供应商、物流等不确定因素&#xff0c;传统手工、表格、纸质作业模式难以应对复杂状况&#x…

设计模式之责任链模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、责任链模式是什么&#xff1f; 责任链模式是一种行为型的软件设计模式&#xff0c;对象内存在对下家的引用&#xff0c;层层连…

【世界读书日】2023年通信好书推荐

今天是世界读书日&#xff08;4月23日&#xff09;。按照老规矩&#xff0c;小编给大家推荐一些通信类的优秀书籍。 过去一年&#xff0c;通信行业的关注热点&#xff0c;主要是&#xff1a;5G-Advanced&#xff08;5.5G&#xff09;、算力网络、东数西算、6G、卫星互联网、智…

历史上的今天大事件查询工具推荐 - 历史上的今天 API

引言 历史上的今天&#xff0c;总会有一些特别的事件发生&#xff0c;这些事件对人类的发展产生了深远的影响。想要了解这些事件&#xff0c;往往需要花费大量的时间和精力去查阅历史资料。但现在&#xff0c;有了历史上的今天 API&#xff0c;一切变得方便了许多。 如果你对…

交友项目【根据id查询单条动态发布评论查询评论列表】

目录 1&#xff1a;根据id查询单条动态 1.1&#xff1a;接口分析 1.2&#xff1a;流程分析 1.3&#xff1a;代码实现 2&#xff1a;发布评论 2.1&#xff1a;接口分析 2.2&#xff1a;流程分析 2.3&#xff1a;代码实现 3&#xff1a;查询评论列表 3.1&#xff1a;接…

Python导出含有中文名文件解决方案

使用Python开发过程中有用到需要导出文件的功能 异常代码 # 代码片段 def return_workbook(self, workbook, model_code, x_io):name “税单.xls”workbook.close()res HttpResponse()res["Content-Type"] "application/octet-stream"res["Conte…

Python 基础(九):列表

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、声明列表二、访问列表元素三、修改列表元素四、添加列表元素4.1、在列表末尾添加元…

京东商品列表数据采集(APP,H5端)

采集场景: 在京东搜索页 https://search.jd.com/Search 输入搜索&#xff0c;搜出后得到的多个商品列表数据。 征地: 商品名称、价格、评论数、店铺名称、店铺链接等字段。 采集结果: 采集结果可导出为Excel&#xff0c;CSV&#xff0c;HTML&#xff0c;数据库等格式。导出…

学习系统编程No.22【消息队列和信号量】

引言&#xff1a; 北京时间&#xff1a;2023/4/20/7:48&#xff0c;闹钟6点和6点30&#xff0c;全部错过&#xff0c;根本起不来&#xff0c;可能是因为感冒还没好&#xff0c;睡不够吧&#xff01;并且今天是星期四&#xff0c;这个星期这是第二篇博客&#xff0c;作为一个日…

Java核心技术 卷1-总结-12

Java核心技术 卷1-总结-12 具体的集合链表数组列表 具体的集合 下表中除了以 Map结尾的类之外&#xff0c; 其他类都实现了 Collection 接口&#xff0c;而以 Map结尾的类实现了 Map 接口。 集合类型描述ArrayList一种可以动态增长和缩减的索引序列LinkedList一种可以在任何位…

为视频直播网站开发选择最佳技术

在今天的数字时代&#xff0c;随着人们越来越多地倾向于观看在线视频&#xff0c;视频直播网站开发已经成为了一项非常有前途的技术。无论是为了提供娱乐、教育还是商业目的&#xff0c;视频直播网站开发都是一个非常重要的领域。 在视频直播网站开发中&#xff0c;你需要考虑…

使用Process Monitor探测日志文件是C++程序哪个模块生成的

目录 1、问题描述 2、使用Process Monitor监测目标文件是哪个模块生成的思路说明 3、操作Process Monitor监测日志文件是哪个模块生成的 4、通过screenctach.dll库的时间戳&#xff0c;找到其pdb文件&#xff0c;然后去查看详细的函数调用堆栈 5、最后 VC常用功能开发汇总…