string.h
string.h主要定义了字符串处理函数和内存操作函数。
字符串处理函数
以下字符串处理函数,详见《字符串》一章。
strcpy():复制字符串。
strncpy():复制字符串,有长度限制。
strcat():连接两个字符串。
strncat():连接两个字符串,有长度限制。
strcmp():比较两个字符串。
strncmp():比较两个字符串,有长度限制。
strlen():返回字符串的字节数。
strchr(),strrchr()
strchr()和strrchr()都用于在字符串中查找指定字符。不同之处是,strchr()从字符串开头开始查找,strrchr()从字符串结尾开始查找,函数名里面多出来的那个r表示
reverse(反向)。
12char* strchr(char* str, int c);char* strrchr(char *str, int c);
它们都接受两个参数,第一个参数是字符串指针,第二个参数是所要查找的字符。
一旦找到该字符,它们就会停止查找,并返回指向该字符的指针。如果没有找到,则返回
NULL。
下面是一个例子。
12 ...
stdio.h
stdio.h是 C 语言的标准 I/O
库,用于读取和写入文件,也用于控制台的输入和输出。
标准 I/O 函数
以下函数用于控制台的输入和输出。
printf():输出到控制台,详见《基本语法》一章。
scanf():从控制台读取输入,详见《I/O 函数》一章。
getchar():从控制台读取一个字符,详见《I/O 函数》一章。
putchar():向控制台写入一个字符,详见《I/O 函数》一章。
gets():从控制台读取整行输入(已废除),详见《I/O 函数》一章。
puts():向控制台写入一个字符串,详见《I/O 函数》一章。
文件操作函数
以下函数用于文件操作,详见《文件操作》一章。
fopen():打开文件。
fclose():关闭文件。
freopen():打开一个新文件,关联一个已经打开的文件指针。
fprintf():输出到文件。
fscanf():从文件读取数据。
getc():从文件读取一个字符。
fgetc():从文件读取一个字符。
putc():向文件写入一个字符。
fputc():向文件写入一个字符。
fgets():从文件读取整行 ...
stdlib.h
类型别名和宏
stdlib.h 定义了下面的类型别名。
size_t:sizeof 的返回类型。
wchar_t:宽字符类型。
stdlib.h 定义了下面的宏。
NULL:空指针。
EXIT_SUCCESS:函数运行成功时的退出状态。
EXIT_FAILURE:函数运行错误时的退出状态。
RAND_MAX:rand() 函数可以返回的最大值。
MB_CUR_MAX:当前语言环境中,多字节字符占用的最大字节数。
abs(),labs(),llabs()
这三个函数用于计算整数的绝对值。abs()用于 int
类型,labs()用于 long int 类型,llabs()用于
long long int 类型。
123int abs(int j);long int labs(long int j);long long int llabs(long long int j);
下面是用法示例。
12345// 输出 |-2| = 2printf("|-2| = %d\n", abs(-2));// 输出 |4| = 4printf(" ...
stdint.h
固定宽度的整数类型
stdint.h 定义了一些固定宽度的整数类型别名,主要有下面三类。
宽度完全确定的整数intN_t,比如int32_t。
宽度不小少于某个大小的整数int_leastN_t,比如int_least8_t。
宽度不小于某个大小、并且处理速度尽可能快的整数int_fastN_t,比如int_fast64_t。
上面所有类型都是有符号的,类型名前面可以加一个前缀u,表示无符号类型,比如uint16_t。
C 语言标准要求至少定义以下类型。
int8_t uint8_t
int16_t uint16_t
int32_t uint32_t
int64_t uint64_t
int_least8_t uint_least8_t
int_least16_t uint_least16_t
int_least32_t uint_least32_t
int_least64_t uint_least64_t
int_fast8_t uint_fast8_t
int_fast16_t uint_fast16_t
int_fast32_t uint_fast32_t ...
signal.h
简介
signal.h提供了信号(即异常情况)的处理工具。所谓“信号”(signal),可以理解成系统与程序之间的短消息,主要用来表示运行时错误,或者发生了异常事件。
头文件signal.h定义了一系列宏,表示不同的信号。
SIGABRT:异常中止(可能由于调用了 abort() 方法)。
SIGFPE:算术运算发生了错误(可能是除以 0 或者溢出)。
SIGILL:无效指令。
SIGINT:中断。
SIGSEGV:无效内存访问。
SIGTERM:终止请求。
上面每个宏的值都是一个正整数常量。
signal()
头文件signal.h还定义了一个signal()函数,用来指定某种信号的处理函数。
1signal(SIGINT, handler);
signal()接受两个参数,第一个参数是某种信号的宏,第二个参数是处理这个信号的函数指针handler。
信号处理函数handler接受一个 int
类型的参数,表示信号类型。它的原型如下。
1void (*func)(int);
handler函数体内部可以根据这个整数,判断到底接受到了哪种信号,因为多个信号可以 ...
math.h
math.h头文件提供了很多数学函数。
很多数学函数的返回值是 double 类型,但是同时提供 float 类型与 long
double
类型的版本,比如pow()函数就还有powf()和powl()版本。
123double pow(double x, double y); float powf(float x, float y);long double powl(long double x, long double y);
为了简洁,下面就略去了函数的f后缀(float
类型)和l后缀(long double)版本。
类型和宏
math.h 新定义了两个类型别名。
float_t:(当前系统)最有效执行 float 运算的类型,宽度至少与 float
一样。
double_t`:(当前系统)最有效执行 double 运算的类型,宽度至少与
double 一样。
它们的具体类型可以通过宏FLT_EVAL_METHOD来了解。
FLT_EVAL_METHOD 的值
float_t 对应的类型
double_t 对应的类型
0
float
d ...
locale.h
简介
locale.h是程序的本地化设置,主要影响以下的行为。
数字格式
货币格式
字符集
日期和时间格式
它设置了以下几个宏。
LC_COLLATE:影响字符串比较函数strcoll()和strxfrm()。
LC_CTYPE:影响字符处理函数的行为。
LC_MONETARY:影响货币格式。
LC_NUMERIC:影响printf()的数字格式。
LC_TIME:影响时间格式strftime()和wcsftime()。
LC_ALL:将以上所有类别设置为给定的语言环境。
setlocale()
setlocale()用来设置当前的地区。
1char* setlocal(int category, const char* locale);
它接受两个参数。第一个参数表示影响范围,如果值为前面五个表示类别的宏之一,则只影响该宏对应的类别,如果值为LC_ALL,则影响所有类别。第二个参数通常只为"C"(正常模式)或""(本地模式)。
任意程序开始时,都隐含下面的调用。
1setlocale(LC_ALL, "C");
下面的语句将格式本地化 ...
limits.h
limits.h提供了用来定义各种整数类型(包括字符类型)取值范围的宏。
CHAR_BIT:每个字符包含的二进制位数。
SCHAR_MIN:signed char 类型的最小值。
SCHAR_MAX:signed char 类型的最大值。
UCHAR_MAX:unsiged char 类型的最大值。
CHAR_MIN:char 类型的最小值。
CHAR_MAX:char 类型的最大值。
MB_LEN_MAX:多字节字符最多包含的字节数。
SHRT_MIN:short int 类型的最小值。
SHRT_MAX:short int 类型的最大值。
USHRT_MAX:unsigned short int 类型的最大值。
INT_MIN:int 类型的最小值。
INT_MAX:int 类型的最大值。
UINT_MAX:unsigned int 类型的最大值。
LONG_MIN:long int 类型的最小值。
LONG_MAX:long int 类型的最大值。
ULONG_MAX:unsigned long int 类型的最大值。
LLONG_MIN:long long ...
iso646.h
iso646.h头文件指定了一些常见运算符的替代拼写。比如,它用关键字and代替逻辑运算符&&。
123if (x > 6 and x < 12)// 等同于if (x > 6 && x < 12)
它定义的替代拼写如下。
and 替代 &&
and_eq 替代 &=
bitand 替代 &
bitor 替代 |
compl 替代 ~
not 替代 !
not_eq 替代 !=
or 替代 ||
or_eq 替代 |=
xor 替代 ^
xor_eq 替代 ^=
inttypes.h
C 语言还在头文件 inttypes.h 里面,为 stdint.h
定义的四类整数类型,提供了printf()和scanf()的占位符。
固定宽度整数类型,比如 int8_t。
最小宽度整数类型,比如 int_least8_t。
最快最小宽度整数类型,比如 int_fast8_t。
最大宽度整数类型,比如 intmax_t。
printf()的占位符采用PRI + 原始占位符 + 类型关键字/宽度的形式构成。举例来说,原始占位符为%d,则对应的占位符如下。
PRIdn (固定宽度类型)
PRIdLEASTn (最小宽度类型)
PRIdFASTn (最快最小宽度类型)
PRIdMAX (最大宽度类型)
上面占位符中的n,可以用8、16、32、64代入。
下面是用法示例。
12345678#include <stdio.h>#include <stdint.h>#include <inttypes.h>int main(void) { int_least16_t x = 3490; printf(" ...