- c语言学习计划
- C语言简介
- C语言基本语法
- C语言-控制结构
- C语言-输入输出
- C语言-数组和字符串
- C语言函数详解
- C语言指针详解
- 结构体和联合体
- C语言高级特性和内存管理
- c语言文件操作
- C 语言标准库
- C 语言标准库(二)
- C 语言标准库(三)
- C 语言标准库(四)
- C 语言标准库(五)
C 语言标准库(二)
class stddef,errno,float,limits除了之前介绍的几个常用标准库外,C 语言标准库还包含很多其他有用的库,涵盖文件处理、信号处理、断言调试、可变参数列表等方面。以下是一些常用的标准库及其重要函数:
1. <ctype.h> —— 字符分类与转换
<ctype.h> 提供了一组函数,用于判断和转换字符类型,常用于处理单个字符的判断,如是否为字母、数字或特殊字符。
1.1 字符判断函数
int isalpha(int c):判断字符是否为字母。int isdigit(int c):判断字符是否为数字。int isalnum(int c):判断字符是否为字母或数字。int islower(int c):判断字符是否为小写字母。int isupper(int c):判断字符是否为大写字母。int isspace(int c):判断字符是否为空白字符(如空格、换行、制表符等)。int ispunct(int c):判断字符是否为标点符号。
1.2 字符转换函数
int tolower(int c):将字符转换为小写字母。int toupper(int c):将字符转换为大写字母。
示例:判断和转换字符
#include <stdio.h>
#include <ctype.h>
int main() {
char c = 'A';
if (isalpha(c)) {
printf("%c 是一个字母\n", c);
}
char lower = tolower(c);
printf("%c 转换为小写: %c\n", c, lower);
return 0;
}
2. <assert.h> —— 断言库
<assert.h> 提供了断言函数 assert,用于在程序中做条件判断,在条件不满足时终止程序并打印错误信息,常用于调试。
void assert(int expression):如果表达式的值为0(假),则程序终止,并输出错误信息。
示例:断言调试
#include <stdio.h>
#include <assert.h>
int main() {
int x = 10;
assert(x == 10); // 正确,不触发断言
x = 5;
assert(x == 10); // 错误,程序会中断
return 0;
}
3. <stdarg.h> —— 可变参数列表
<stdarg.h> 提供了处理可变参数函数的宏,例如可以编写接受不定数量参数的函数(如 printf 函数)。
3.1 常用宏
va_list:声明一个变量,用于存储参数信息。va_start(va_list ap, last):初始化ap,使其指向第一个可变参数。va_arg(va_list ap, type):返回当前可变参数的值,并将ap指向下一个参数。va_end(va_list ap):清理ap。
示例:实现类似 printf 的可变参数函数
#include <stdio.h>
#include <stdarg.h>
void print_numbers(int count, ...) {
va_list args;
va_start(args, count); // 初始化参数列表
for (int i = 0; i < count; i++) {
int num = va_arg(args, int); // 获取参数
printf("%d ", num);
}
va_end(args); // 清理参数列表
printf("\n");
}
int main() {
print_numbers(3, 10, 20, 30); // 输出: 10 20 30
return 0;
}
4. <signal.h> —— 信号处理库
<signal.h> 提供了用于处理信号(如终止程序的信号、异常信号等)的函数。信号是操作系统与程序之间的通信机制,程序可以通过捕获信号并进行相应处理来避免突然终止。
4.1 常用函数
void (*signal(int signum, void (*handler)(int)))(int):指定一个信号处理函数,signum表示信号编号,handler是处理该信号的函数。int raise(int sig):向自身发送信号。
4.2 常见信号
SIGINT:程序中断(通常由Ctrl + C触发)。SIGTERM:程序终止信号。SIGFPE:算术错误信号(如除零)。SIGSEGV:无效内存访问(段错误)。
示例:捕获 SIGINT 信号
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
void handle_sigint(int sig) {
printf("捕获到 SIGINT 信号\n");
exit(0); // 退出程序
}
int main() {
signal(SIGINT, handle_sigint); // 设置信号处理函数
while (1) {
printf("程序运行中...\n");
sleep(1);
}
return 0;
}
5. <limits.h> 和 <float.h> —— 类型范围和精度
5.1 <limits.h> —— 整数类型的取值范围
<limits.h> 定义了各种整型变量的取值范围。例如:
INT_MAX:int类型的最大值。INT_MIN:int类型的最小值。UINT_MAX:unsigned int类型的最大值。
示例:输出整型的取值范围
#include <stdio.h>
#include <limits.h>
int main() {
printf("int 的最大值: %d\n", INT_MAX);
printf("int 的最小值: %d\n", INT_MIN);
printf("unsigned int 的最大值: %u\n", UINT_MAX);
return 0;
}
5.2 <float.h> —— 浮点类型的取值范围和精度
<float.h> 定义了浮点类型的取值范围和精度。例如:
FLT_MAX:float类型的最大值。DBL_MAX:double类型的最大值。LDBL_MAX:long double类型的最大值。
示例:输出浮点型的取值范围
#include <stdio.h>
#include <float.h>
int main() {
printf("float 的最大值: %e\n", FLT_MAX);
printf("double 的最大值: %e\n", DBL_MAX);
return 0;
}
6. <errno.h> —— 错误处理
<errno.h> 提供了系统错误码,通过全局变量 errno 来表示最近发生的错误。
int errno:表示最近一次系统调用或库函数失败的错误码。char *strerror(int errnum):返回与错误码errnum对应的错误消息。void perror(const char *s):打印错误消息。
示例:错误处理
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (file == NULL) {
perror("文件打开失败"); // 打印错误信息
printf("错误代码: %d\n", errno);
printf("错误信息: %s\n", strerror(errno));
}
return 0;
}
7. <stddef.h> —— 标准定义
<stddef.h> 定义了一些常用的类型和宏,如 size_t、ptrdiff_t 和 NULL 等。
size_t:用于表示对象的大小,通常由sizeof操作符返回。ptrdiff_t:用于表示指针之间的差值。NULL:空指针的宏定义。
示例:使用 size_t 和 NULL
#include <stdio.h>
#include <stddef.h>
int main() {
int arr[] = {1, 2, 3, 4};
size_t n = sizeof(arr) / sizeof(arr[0]);
printf("数组的长度: %zu\n", n);
int *p = NULL; // 定义空指针
if (p == NULL) {
printf("指针为空\n");
}
return 0;
}
这些库函数和宏大大增强了 C 语言的功能,能够简化编程工作并提供高效的解决方案。根据需求,熟练使用这些标准库函数可以帮助开发者快速实现各种功能。
评论区
评论列表