C 标准库 - <time.h>和<float.h>详解

目录

简介

库变量

库宏

库函数

简介

库变量

库宏

库函数


<time.h>

简介

C 标准库中的 <time.h> 头文件提供了处理时间和日期的函数和类型定义。它包含了一些结构体和函数,可以用于获取系统当前的日期、时间,以及进行日期和时间的计算等操作。

在 <time.h> 头文件中,常用的类型包括 struct tm 结构体,它用来表示一个日历时间,包括年、月、日、时、分、秒等成员;time_t 类型用来表示时间值,通常是一个整数,代表从某一固定时间点(通常是 1970 年 1 月 1 日)经过的秒数。

在 <time.h> 中,还包含了一系列函数,比如用于获取当前时间的函数 time(),用于将时间转换为字符串表示的函数 strftime(),以及一些用于日期和时间运算的函数,比如计算时间差的函数 difftime() 等。

总的来说,<time.h> 头文件提供了一系列函数和类型,可以帮助程序员在 C 语言中方便地处理日期和时间,进行时间的获取、格式化输出、计算等操作。

库变量

下面是头文件 time.h 中定义的变量类型:

  • size_t:无符号整数类型,通常用于表示对象的大小。在 C 语言中,使用 sizeof 运算符可以返回对象或类型的大小,其结果就是 size_t 类型。
  • clock_t:用于存储处理器时间的类型。它通常被用来度量程序执行所花费的处理器时间,比如通过 clock() 函数来获取程序运行时间的信息。
  • time_t:用于存储日历时间的类型。time_t 类型通常被用来表示从某个固定时间点(通常是 1970 年 1 月 1 日)经过的秒数,常用于时间的表示和计算。
  • struct tm:用来保存时间和日期的结构体。它包含了年、月、日、时、分、秒等成员,可以方便地表示一个特定的时间点。在 C 语言中,通常使用 struct tm 结构体进行时间的表示和计算,比如获取系统当前时间,以及进行时间格式的转换等操作。

tm 结构的定义如下:

struct tm {int tm_sec;         /* 秒,范围从 0 到 59        */int tm_min;         /* 分,范围从 0 到 59        */int tm_hour;        /* 小时,范围从 0 到 23        */int tm_mday;        /* 一月中的第几天,范围从 1 到 31    */int tm_mon;         /* 月,范围从 0 到 11        */int tm_year;        /* 自 1900 年起的年数        */int tm_wday;        /* 一周中的第几天,范围从 0 到 6    */int tm_yday;        /* 一年中的第几天,范围从 0 到 365    */int tm_isdst;       /* 夏令时                */
};

库宏

下面是头文件 time.h 中定义的宏:

  • NULL:这个宏表示空指针常量的值。在 C 语言中,通常使用 NULL 来表示一个空指针,即指向地址为 0 的指针。
  • CLOCKS_PER_SEC:这个宏表示每秒的处理器时钟个数。在 C 语言中,clock() 函数返回的是处理器时钟运行的周期数,通过将其除以 CLOCKS_PER_SEC,就可以得到程序运行的秒数。

库函数

下面是头文件 time.h 中定义的函数:

  1. asctime():将结构体 tm 中的时间转换为字符串,并返回一个指向该字符串的指针。
  2. clock():返回程序执行所花费的处理器时钟数,通常用来度量程序的执行时间。
  3. ctime():将从 1970 年 1 月 1 日起经过的秒数转换为当地时间,并返回一个表示当地时间的字符串。
  4. difftime():计算两个时间之间的差异(以秒为单位)。
  5. gmtime():将从 1970 年 1 月 1 日起经过的秒数转换为协调世界时(UTC)或格林威治标准时间(GMT),并返回一个指向表示时间的结构体的指针。
  6. localtime():将从 1970 年 1 月 1 日起经过的秒数转换为本地时间,并返回一个指向表示时间的结构体的指针。
  7. mktime():将一个表示时间的结构体转换为从 1970 年 1 月 1 日起经过的秒数。
  8. strftime():将一个表示时间的结构体按照指定的格式进行格式化,并将结果存储在一个字符串中。
  9. time():获取当前时间,并将其编码成 time_t 格式返回。

以下是一个示例代码,演示如何使用 time.h 中的函数来处理日期和时间,

#include <stdio.h>
#include <time.h>int main() {time_t current_time;struct tm *time_info;char time_string[80];// 获取当前时间current_time = time(NULL);// 转换为本地时间time_info = localtime(&current_time);// 格式化时间为字符串strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", time_info);// 打印当前时间printf("当前时间:%s\n", time_string);return 0;
}

在这个示例代码中,首先包含了 <stdio.h> 和 <time.h> 头文件。然后,在 main() 函数中进行了以下操作:

  1. 声明了一个变量 current_time,用于保存当前时间的时间戳。
  2. 声明了一个指向 struct tm 结构体的指针 time_info,用于保存转换后的本地时间。
  3. 声明了一个字符数组 time_string,用于存储格式化后的时间字符串。
  4. 使用 time(NULL) 函数获取当前时间的时间戳,并将其赋值给 current_time。
  5. 使用 localtime(&current_time) 函数将时间戳转换为本地时间,并将结果保存在 time_info 中。
  6. 使用 strftime() 函数将本地时间格式化为字符串,并将结果存储在 time_string 中。"%Y-%m-%d %H:%M:%S" 是格式化字符串的格式,用于指定输出的时间格式。
  7. 使用 printf() 函数打印当前时间。

<string.h>

简介

C 标准库中的 <string.h> 头文件提供了许多用于处理字符串的函数和宏定义,它们可以帮助开发人员进行字符串操作、内存操作以及一些通用的数组操作。这些函数和宏定义使得在 C 语言中处理字符串和内存操作变得更加便捷和高效。

库变量

下面是头文件 string.h 中定义的变量类型:

序号变量 & 描述
1size_t
这是无符号整数类型,它是 sizeof 关键字的结果。

库宏

下面是头文件 string.h 中定义的宏:

序号宏 & 描述
1

NULL
宏NULL在头文件string.h中被定义为一个空指针常量的值。它通常用于表示指针变量没有指向任何有效对象,也可以用于初始化指针变量。在C语言中,宏NULL的定义如下:

#define NULL ((void *)0)

这里的(void *)表示一个通用的指针类型,0则表示指针的值为空。因此,当我们将一个指针变量初始化为NULL时,表示该指针不指向任何有效的内存地址。

需要注意的是,虽然NULL在头文件string.h中定义,但它实际上是C语言标准库中的定义,在其他头文件中同样可以使用。

库函数

下面是头文件 string.h 中定义的函数:

序号函数 & 描述
1void *memchr(const void *str, int c, size_t n)
在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
2int memcmp(const void *str1, const void *str2, size_t n)
把 str1 和 str2 的前 n 个字节进行比较。
3void *memcpy(void *dest, const void *src, size_t n)
从 src 复制 n 个字符到 dest
4void *memmove(void *dest, const void *src, size_t n)
另一个用于从 src 复制 n 个字符到 dest 的函数。
5void *memset(void *str, int c, size_t n)
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
6char *strcat(char *dest, const char *src)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
7char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
8char *strchr(const char *str, int c)
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
9int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
10int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 进行比较,最多比较前 n 个字节。
11int strcoll(const char *str1, const char *str2)
把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置。
12char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest
13char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
14size_t strcspn(const char *str1, const char *str2)
检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。
15char *strerror(int errnum)
从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。
16size_t strlen(const char *str)
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
17char *strpbrk(const char *str1, const char *str2)
检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。
18char *strrchr(const char *str, int c)
在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
19size_t strspn(const char *str1, const char *str2)
检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。
20char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
21char *strtok(char *str, const char *delim)
分解字符串 str 为一组字符串,delim 为分隔符。
22size_t strxfrm(char *dest, const char *src, size_t n)
根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。

以下是一个简单的示例代码,演示了如何使用 string.h 中的一些函数来进行字符串操作:

#include <stdio.h>
#include <string.h>int main() {char str1[20] = "Hello, ";char str2[20] = "world!";char str3[20];int result;// 使用 strcat 将 str2 追加到 str1 的末尾strcat(str1, str2);printf("strcat: %s\n", str1);// 使用 strncpy 复制 str1 的前 6 个字符到 str3 中strncpy(str3, str1, 6);str3[6] = '\0';  // 需要手动添加字符串结束符printf("strncpy: %s\n", str3);// 使用 strlen 获取字符串长度printf("strlen: %lu\n", strlen(str1));// 使用 strcmp 比较 str1 和 str2 是否相等result = strcmp(str1, str2);if (result == 0) {printf("strcmp: str1 等于 str2\n");} else {printf("strcmp: str1 不等于 str2\n");}// 使用 memset 将 str3 的前 5 个字符设置为 'A'memset(str3, 'A', 5);printf("memset: %s\n", str3);// 使用 memcpy 将 str2 的前 5 个字符复制到 str3 中memcpy(str3, str2, 5);str3[5] = '\0';  // 需要手动添加字符串结束符printf("memcpy: %s\n", str3);// 使用 strchr 在 str1 中查找字符 'o'char* ptr = strchr(str1, 'o');printf("strchr: %s\n", ptr);// 使用 strstr 在 str1 中查找字符串 "world"ptr = strstr(str1, "world");printf("strstr: %s\n", ptr);// 使用 strtok 分割字符串char str4[] = "hello,world,how,are,you";char* token = strtok(str4, ",");while (token != NULL) {printf("strtok: %s\n", token);token = strtok(NULL, ",");}return 0;
}

让我们编译并运行上面的程序,这将产生以下结果:

strcat: Hello, world!
strncpy: Hello,
strlen: 13
strcmp: str1 不等于 str2
memset: AAAAA,
memcpy: world
strchr: o, world!
strstr: world!
strtok: hello
strtok: world
strtok: how
strtok: are
strtok: you

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

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

相关文章

【电路笔记】-电源电压

电源电压 文章目录 电源电压1、概述1.1 交流发电机1.2 电池1.3 理想电压源1.4 实际电压源1.5 连接规则 2、相关源2.1 压控电压源 (VCVS)2.2 电流控制电压源 (CCVS) 3、总结 在本文中&#xff0c;我们详细介绍了称为电源电压的重要电子元件的架构、功能和使用。 我们首先提出理想…

MySQL复杂查询与优化:窗口函数、分页查询与查询计划优化

在MySQL数据库中&#xff0c;进行复杂查询并优化查询计划是提高数据库性能的关键。本文将深入探讨窗口函数、分页查询以及查询计划优化的方法。 1. 窗口函数&#xff08;Window Functions&#xff09; 1.1 什么是窗口函数&#xff1f; 窗口函数是一种在查询结果集内执行聚合…

【开题报告】基于SpringBoot的网上摄影工作室的设计与实现

1.选题背景与意义 随着社交媒体的普及和人们对个人形象的重视&#xff0c;摄影行业发展迅速。传统的摄影工作室在数字化时代也需要向线上转型&#xff0c;以满足用户更便捷、快速的需求。因此&#xff0c;基于SpringBoot的网上摄影工作室的设计与实现具有以下背景和意义&#…

前端面试题【72道】

文章目录 1. 说说你对盒子模型的理解2. css选择器有哪些&#xff1f;优先级&#xff1f;哪些属性可以继承&#xff1f;3. 元素水平垂直居中的方法有哪些&#xff1f;如果元素不定宽高呢&#xff1f;4. 怎么理解回流跟重绘&#xff1f;什么场景下会触发&#xff1f;5. 什么是响应…

从零开始学习typescript——数据类型

数据类型 以前我们用js编写代码的时候&#xff0c;都是直接使用let、var、const 来定义数据类型&#xff1b;js会在运行时来确定数据类型&#xff0c;但是在ts中&#xff0c;可以在声明时就可以指定数据类型。如果你学过其他编程语言&#xff0c;比如c、java就能更好的理解了。…

Android 12.0 mt6771新增分区功能实现三

1.前言 在12.0的系统开发中,在对某些特殊模块中关于数据的存储方面等需要新增分区来保存, 所以就需要在系统分区新增分区,接下来就来实现这个功能,看第三部分关于的实现新增分区的过程 2.mt6771新增分区功能实现三的核心类 build/make/tools/releasetools/common.pydevic…

什么是神经网络(Neural Network,NN)

1 定义 神经网络是一种模拟人类大脑工作方式的计算模型&#xff0c;它是深度学习和机器学习领域的基础。神经网络由大量的节点&#xff08;或称为“神经元”&#xff09;组成&#xff0c;这些节点在网络中相互连接&#xff0c;可以处理复杂的数据输入&#xff0c;执行各种任务…

Docker安装Zookeeper

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【数据结构】栈和队列的模拟实现

前言&#xff1a;前面我们学习了单链表并且模拟了它的实现&#xff0c;今天我们来进一步学习&#xff0c;来学习栈和队列吧&#xff01;一起加油各位&#xff0c;后面的路只会越来越难走需要我们一步一个脚印&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x…

【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)

本案例讲解矢量数据几何校正&#xff0c;根据一个矢量数据去校正另外一个矢量数据。 文章目录 一、加载实验数据二、空间校正三、注意事项 一、加载实验数据 在ArcGIS Pro中加载数据效果如下&#xff1a; design&#xff1a;需要校正的数据图层planroadcenter&#xff1a;目标…

ubuntu22.04安装网易云音乐

附件&#xff1a; https://download.csdn.net/download/weixin_44503976/88557248 wget https://d1.music.126.net/dmusic/netease-cloud-music_1.2.1_amd64_ubuntu_20190428.deb wget -O patch.c https://aur.archlinux.org/cgit/aur.git/plain/patch.c?hnetease-cloud-m…

【Docker】从零开始:5.Docker安装与卸载

【Docker】从零开始&#xff1a;4.Docker安装 安装步骤1.确定你是CentOS7及以上版本2.卸载旧版本a.查看是否已安装dockerb.如何安装了卸载docker 3.通过yum安装gcc相关依赖包4.安装需要的软件包5.设置yum stable镜像仓库 &#xff08;源&#xff09;1.备份源2.配置源阿里云仓库…

数据库的基本概念以及MySQL基本操作

一、数据库的基本概念 1、数据库的组成 数据&#xff1a;描述事物的符号记录 包括数字&#xff0c;文字、图形、图像、声音、档案记录等 以“记录”形式按统一格式进行存储 表&#xff1a;将不同的记录组织在一起&#xff0c;用来存储具体数据 数据库&#xff1a; 表的集合…

【开源】基于Vue和SpringBoot的服装店库存管理系统

项目编号&#xff1a; S 052 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S052&#xff0c;文末获取源码。} 项目编号&#xff1a;S052&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…

AT89S52单片机

目录 一.AT89S52单片机的硬件组成 1.CPU(微处理器) (1)运算器 (2)控制器 2.数据存储器 (RAM) (1)片内数据存储器 (2)片外数据存储器 3.程序存储器(Flash ROM) 4.定时器/计数器 5.中断系统 6.串行口 7.P0口、P1口、P2口和P3口 8.特殊功能寄存器 (SFR) 常用的特殊功…

>Web 3.0顶级干货教学:浅析区块链与货币关系

Web 3.0顶级干货教学&#x1f525;&#xff1a;浅析区块链与货币关系 尊重原创&#xff0c;编写不易 &#xff0c;帮忙点赞关注一下~转载小伙伴请注明出处&#xff01;谢谢 1.0 数字交易 最早一笔数字化交易 是在www.PizzaHut.com 在 1994 年产生的&#xff0c;但是有趣的事情…

79基于matlab的大米粒中杂质识别

基于matlab的大米粒中杂质识别&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 79matlab图像处理杂质识别 (xiaohongshu.com)

JAVA sql 查询2

SELECT * FROM employees order by salayr DESC SELECT employee_id,first_name,salary from employees ORDER BY salary,employee_id desc -- 最大值 最小值 总和 平均值 SELECT max(salary),MIN(salary),sum(salary),AVG(salary) FROM employees -- 总共有多少员工 select…

vb加了me

Imports System.Data.OleDbPublic Class Form1小目录简写Dim jiuyue As String() {"创", "出", "利", "民", "申", "书", "士", "得", "撒上", "撒下", "王上&quo…

洛谷 P3252 [JLOI2012] 树

读题就读趋势了&#xff0c;还以为是每个深度都可以选一个&#xff0c;然后深度升序就可以了&#xff0c;以为是个按深度的01背包。 但是前面还说了是一条路径&#xff0c;路径是不能断开的。那就从每个点开始爆搜一次就好了。 看了一下范围n<1e5&#xff0c;n^2爆搜理论上…