目录
零. 简介
一. assert
二. ctype
三. errno
四. float
五. limits
六. locale
C基础-标准库下连接: http://t.csdnimg.cn/LCcXR
零. 简介
C 语言标准库是一组由 ANSI C 标准规定的头文件和函数的集合,为 C 语言提供了常用的功能,以满足各种基本的编程需求。它可以在不同的操作系统和编译器下使用,保证了 C 语言的可移植性
一. assert
assert
是 C 语言标准库 <assert.h>
中的一个宏,用于在程序调试阶段进行条件断言。
属性和特点:
- 当断言表达式为假(即值为 0)时,
assert
会输出一条错误信息,并终止程序的执行。 - 在发布版本中,如果定义了
NDEBUG
宏(通常通过编译器选项实现),assert
语句会被忽略,不会产生任何运行时开销。
方法:assert(expression)
,其中 expression
是一个需要判断真假的表达式。
示例代码:
#include <assert.h>
#include<stdio.h>
int main() {
int num = 5;
// 断言 num 大于 0
assert(num > 0);
printf("num is positive\n");
return 0;
}
在上述代码中,如果 num
不大于 0 ,assert
就会触发错误,输出相关信息并终止程序。
在实际开发中,assert
常用于检查函数的前置条件、后置条件以及程序中的关键逻辑点,帮助开发者在调试阶段及时发现问题。
效果图:
成立
不成立
二. ctype
ctype.h
定义了一批 C 语言字符分类函数,用于测试字符是否属于特定的字符类别,如字母字符、控制字符等,既支持单字节(Byte)字符,也支持宽字符。
以下是一些常见的函数及其简介、返回值和参数说明:
isalpha
:检查字符是否是字母。函数原型为int isalpha(char ch)
,返回值为是字母则返回非 0(在某些编译器中可能为 2),否则返回 0。iscntrl
:检查字符是否是控制字符(其 ASCII 码在 0 和 0x1F 之间,数值为 0 - 31)。函数原型为int iscntrl(int ch)
,返回值为是控制字符返回非 0,否则返回 0。isdigit
:检查字符是否是数字(0 - 9)。函数原型为int isdigit(char ch)
,返回值为是数字返回非 0,否则返回 0。isgraph
:检查字符是否是可显示字符(其 ASCII 码在 0x21 到 0x7E 之间),不包括空格。函数原型为int isgraph(int ch)
,返回值为是可显示字符返回非 0,否则返回 0。islower
:检查字符是否是小写字母(a - z)。函数原型为int islower(int ch)
,返回值为是小写字母返回非 0,否则返回 0。isupper
:检查字符是否是大写字母(A - Z)。函数原型为int isupper(int ch)
,返回值为是大写字母返回非 0,否则返回 0。tolower
:将字符转换为小写字母。函数原型为int tolower(int ch)
,返回值为返回ch
所代表的字符的小写字母。toupper
:将字符转换为大写字母。函数原型为int toupper(int ch)
,返回值为与ch
相应的大写字母。isalnum
:检查字符是否是字母或数字。函数原型为int isalnum(int ch)
,返回值为是字母或数字返回非 0,否则返回 0。isprint
:检查字符是否是可打印字符(包括空格),其 ASCII 码在 0x20 到 0x7E 之间。函数原型为int isprint(int ch)
,返回值为是可打印字符返回非 0,否则返回 0。ispunct
:检查字符是否是标点字符(不包括空格),即除字母、数字和空格以外的所有可打印字符。函数原型为int ispunct(int ch)
,返回值为是标点字符返回非 0,否则返回 0。isspace
:检查字符是否是空格符、跳格符(控制字符)或换行符。函数原型为int isspace(int ch)
,返回值为是返回非 0,否则返回 0。isxdigit
:检查字符是否是一个 16 进制数学字符(即 0 - 9,或 A - F,或 a - f)。函数原型为int isxdigit(int ch)
,返回值为是返回非 0,否则返回 0。isascii
:测试参数是否是 ASCII 码 0 - 127。函数原型为int isascii(int ch)
,返回值为是返回非 0,否则返回 0。
以下是一个使用这些函数的例子:
#include <ctype.h>
#include <stdio.h>
int main() {
char ch;
printf("输入一个字符:");
scanf_s("%c", &ch);
if (isalnum(ch)) {
printf("%c 是字母或数字.", ch);
} else {
printf("%c 不是字母或数字.", ch);
}
putchar('\n');
return 0;
}
效果图
三. errno
errno
是 C 语言标准库中用于表示错误代码的全局变量。
属性:
- 它是一个整数类型的变量。
方法:
在 C 标准库中的许多函数,当执行出错时,会设置errno
的值来指示具体的错误类型。
常见的错误代码:
EDOM
:表示函数的参数超出了定义域。ERANGE
:表示函数的结果超出了范围。
示例代码:
#include <stdio.h>
#include <math.h>
#include <errno.h>
int main() {
double num = -1.0;
double result = sqrt(num);
if (errno == EDOM) {
printf("错误:参数不能为负数\n");
} else {
printf("平方根:%f\n", result);
}
return 0;
}
在上述示例中,对负数求平方根会导致错误,errno
被设置为 EDOM
,从而可以检测到错误并进行相应处理。
效果图
四. float
float.h
是 C 语言标准库中的一个头文件,它提供了有关浮点数类型(如 float
、double
和 long double
)的范围和精度的信息。
属性:
包含了一系列定义的宏,用于表示浮点数的各种属性,例如最小正值、最大值、精度等。
方法:
本身没有方法,只是通过宏来提供信息。
以下是一些常见的宏和示例代码:
#include <stdio.h>
#include <float.h>
int main() {
printf("Float 类型的最小值: %e\n", FLT_MIN);
printf("Float 类型的最大值: %e\n", FLT_MAX);
printf("Float 类型的精度(小数位数): %d\n", FLT_DIG);
printf("Double 类型的最小值: %e\n", DBL_MIN);
printf("Double 类型的最大值: %e\n", DBL_MAX);
printf("Double 类型的精度(小数位数): %d\n", DBL_DIG);
printf("Long Double 类型的最小值: %Le\n", LDBL_MIN);
printf("Long Double 类型的最大值: %Le\n", LDBL_MAX);
printf("Long Double 类型的精度(小数位数): %d\n", LDBL_DIG);
return 0;
}
通过这些宏,您可以在编程中根据实际需求合理地处理浮点数,以避免出现溢出、精度不足等问题。
五. limits
limits.h
是 C 标准库中的头文件,用于定义各种整数类型的取值范围和限制。
属性:
- 包含了一系列表示整数类型范围的宏,例如
INT_MIN
(int
类型的最小值)、INT_MAX
(int
类型的最大值)等。
方法:
它本身并没有方法,只是通过宏来提供相关的信息。
以下是一个简单的示例代码,展示了如何使用 limits.h
中的宏:
#include <stdio.h>
#include <limits.h>
int main() {
printf("int 类型的最小值: %d\n", INT_MIN);
printf("int 类型的最大值: %d\n", INT_MAX);
printf("unsigned int 类型的最大值: %u\n", UINT_MAX);
printf("char 类型的最小值: %d\n", CHAR_MIN);
printf("char 类型的最大值: %d\n", CHAR_MAX);
return 0;
}
在这个示例中,我们使用了 limits.h
中定义的宏来输出不同整数类型的取值范围。
六. locale
locale.h
是 C 标准库中的头文件,用于处理本地化相关的设置和操作。
本地化涉及到根据特定的地域或文化习惯来定制程序的行为,例如数字、货币、日期和时间的格式,字符编码,以及文本的排序规则等。
属性:
- 包含了一系列用于设置和获取本地化信息的宏和数据类型。
方法:
setlocale
函数:用于设置或查询程序的当前本地化环境。localeconv
函数:返回一个包含本地化特定的数字和货币格式信息的结构体。
以下是一个简单的示例代码,展示了如何使用 locale.h
中的函数:
#include <stdio.h>
#include <locale.h>
int main() {
// 设置本地环境为系统默认
setlocale(LC_ALL, "");
struct lconv *locale_info = localeconv();
printf("本地货币符号: %s\n", locale_info->currency_symbol);
printf("小数点字符: %c\n", locale_info->decimal_point);
return 0;
}
请注意,上述示例的输出结果会因您的系统本地化设置而有所不同.
效果图: