以下是一些C语言中常用函数的说明和示例:
提示:以下是本篇文章正文内容,下面案例仅供参考
一、stdio.h(标准输入输出库)
1.scanf:
用于从标准输入(通常是键盘)读取格式化输入。
2.printf:
用于格式化输出到标准输出(通常是屏幕)。
3.sprintf
:
类似于printf
,但是将格式化的输出写入字符串。
#include <stdio.h>
int main() {
char buffer[100];
int age = 25;
sprintf(buffer, "I am %d years old.", age);
printf("%s\n", buffer);
return 0;
}
注释:
1. char buffer[100];
: 这行代码声明了一个字符数组 buffer
,大小为 100 个字符。这个数组将用来存储 sprintf
函数生成的字符串。
2.sprintf(buffer, "I am %d years old.", age);
: 这行代码使用 sprintf
函数将格式化的字符串存储到 buffer
中。"I am %d years old."
是一个格式字符串,其中 %d
是一个占位符,用于整数值。age
是传递给格式字符串的实际值,即 25。
sprintf
函数将 "I am 25 years old."
这个字符串格式化并存储到 buffer
中。
4.fgets
:
从文件或标准输入读取字符串
#include <stdio.h>
int main() {
char str[100];
fgets(str, 100, stdin);
printf("You entered: %s", str);
return 0;
}
注意:
-
fgets(str, 100, stdin);
: 这行代码使用fgets
函数从标准输入(通常是键盘)读取一行文本。str
是存储输入的字符数组,100
是最大读取字符数(包括空字符\0
),stdin
是标准输入流。当这行代码执行时,程序会等待用户输入一行文本。用户输入文本后按下回车键,
fgets
会读取这行文本并将其存储在str
数组中,包括最后的换行符\n
(如果还有空间的话)。如果用户输入的字符数少于 100 个字符,fgets
会在读取到换行符或到达最大字符数时停止读取。 -
printf("You entered: %s", str);
: 这行代码使用printf
函数将一条消息和用户输入的文本输出到屏幕。"You entered: %s"
是一个格式字符串,其中%s
是一个占位符,用于字符串值。
二、stdlib.h(标准库)
1.malloc
:
动态内存分配
#include <stdlib.h>
int main() {
int *p = (int *)malloc(sizeof(int) * 10);
if (p == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
free(p);
return 0;
}
2.free
:
释放动态分配的内存//同上
3.system
:
执行系统命令
#include <stdlib.h>
int main() {
system("ls");
return 0;
}
三、string.h(字符串处理库)
1. 字符串复制
函数 | 功能 | 注意事项 |
---|---|---|
strcpy(dest, src) | 将 src 字符串复制到 dest | dest 空间必须足够大 |
strncpy(dest, src, n) | 复制 src 的前 n 个字符到 dest | 不会自动补 \0 |
示例:
char dest[10]; strcpy(dest, "hello"); // dest = "hello"
2. 字符串连接
函数 | 功能 |
---|---|
strcat(dest, src) | 将 src 拼接到 dest 末尾 |
strncat(dest, src, n) | 拼接 src 的前 n 个字符 |
示例:
char str[20] = "hello"; strcat(str, " world"); // str = "hello world"
3. 字符串比较
函数 | 返回值 | 说明 |
---|---|---|
strcmp(s1, s2) | =0 相等,>0 s1 大,<0 s2 大 | 区分大小写 |
strncmp(s1, s2, n) | 比较前 n 个字符 |
示例:
if (strcmp("abc", "ABC") > 0) { printf("abc > ABC"); // 输出(因为 'a' > 'A') }
例如:当比较字符串 "cd"
和字符串 "az"
时,strcmp
函数会逐个字符比较它们的 ASCII 码值,直到找到不同的字符或字符串结束。
比较过程
-
比较第一个字符:
-
s1
的第一个字符是'c'
,ASCII 码值为 99。 -
s2
的第一个字符是'a'
,ASCII 码值为 97。 -
比较
'c'
和'a'
的 ASCII 码值:99 > 97
。
因为
'c'
的 ASCII 码值大于'a'
,所以strcmp("cd", "az")
会返回一个 大于 0 的值。 -
-
后续字符的比较:
-
由于第一个字符已经决定了比较结果,
strcmp
不会继续比较后续的字符(即'd'
和'z'
)。
-
返回值
根据上述比较,strcmp("cd", "az")
会返回一个 大于 0 的值。具体返回值通常是两个字符 ASCII 码值的差值:
-
返回值为
99 - 97 = 2
。
4. 字符串长度
函数 | 说明 |
---|---|
strlen(s) | 返回 s 的长度(不含 \0 ) |
注意:
char s[] = "hello"; printf("%d", strlen(s)); // 输出 5
5. 内存操作(也可用于字符串)
函数 | 功能 |
---|---|
memcpy(dest, src, n) | 复制 n 字节的内存块 |
memset(s, val, n) | 将 s 的前 n 字节设为 val |
示例:
char s[10]; memset(s, 'A', 5); // s = "AAAAA\0..."
6. 字符串查找
函数 | 功能 |
---|---|
strchr(s, c) | 查找字符 c 在 s 中首次出现的位置 |
strstr(s, substr) | 查找子串 substr 在 s 中的位置 |
示例:
char *p = strstr("hello world", "wor"); // p 指向 "world"
7. 其他实用函数
函数 | 功能 |
---|---|
strtok(s, delim) | 用 delim 分割字符串 s (会修改原字符串) |
strerror(errno) | 将错误码转为错误信息字符串 |
重要注意事项:
-
安全性问题:
-
strcpy
、strcat
等函数不会检查目标数组大小,可能导致缓冲区溢出。 -
更安全的替代函数(如
strncpy
、strncat
)需要手动处理\0
。
-
-
字符串结尾:
所有字符串必须以\0
结尾,否则函数会越界访问内存。 -
头文件:
使用时需包含头文件:#include <string.h>
新手建议:
-
先掌握
strcpy
、strcmp
、strlen
这三个最常用的函数。 -
练习时多用
strncpy
和strncat
避免溢出问题。 -
遇到分割字符串的需求时,再学习
strtok
。
四、math.h(数学库)
-
基础数学函数:
abs
:计算整数的绝对值。int abs(int x);fabs
:计算浮点数的绝对值。double fabs(double x);floor
:计算小于或等于给定浮点数的最大整数。ceil
:计算大于或等于给定浮点数的最小整数。round
:将浮点数四舍五入到最近的整数。trunc
:将浮点数截断为整数部分。- sqrt: 用于计算双精度的平方根。double sqrt(double x);
-
指数和对数函数:
exp
:计算e的双精度实数x次幂。double exp(double x)log
:计算以e为底的双精度实数x的对数ln(x)。double log(double x)log10
:计算以10为底的双精度实数x的对数lg(x)。double log10(double x)pow
:计算 𝑥x 的 𝑦y 次幂。double pow(double x,double y);
-
三角函数:
sin
:计算正弦值。 double sin(double x)cos
:计算余弦值。//同上tan
:计算正切值。asin
:计算反正弦值。double asin(double x)acos
:计算反余弦值。atan
:计算反正切值。atan2
:计算两个参数的反正切值,可以确定正确的象限。double atan2(double y, double x);
-
双曲函数:
sinh
:计算双曲正弦值。double sinh(double x)cosh
:计算双曲余弦值。tanh
:计算双曲正切值。asinh
:计算反双曲正弦值。acosh
:计算反双曲余弦值。atanh
:计算反双曲正切值。//皆同上!
-
浮点环境:
frexp
:将浮点数分解为尾数和指数。ldexp
:计算 𝑥×2𝑛x×2n,其中 𝑥x 是尾数,𝑛n 是指数。modf
:将浮点数分解为整数部分和小数部分。
-
误差函数和特殊函数:
erf
:计算误差函数。erfc
:计算互补误差函数。tgamma
:计算伽玛函数。lgamma
:计算伽玛函数的自然对数。
-
常量:
M_PI
:圆周率 𝜋π 的值。M_E
:自然对数的底 𝑒e 的值。M_LOG2E
:以 2 为底 𝑒e 的对数值。M_LOG10E
:以 10 为底 𝑒e 的对数值。M_SQRT2
:2 的平方根。M_SQRT1_2
:1/2 的平方根。
五、. ctype.h(字符处理库)
1.字符类型判断函数
字符类型判断函数用于判断字符的类型,如是整数、字母还是标点符号等。如果是,返回非零,否则返回零
1.int isalnum(int c):文字或者数字
2.int isalpha(int c):字母
3.int iscntrl(int c):控制符
4.int isdigit(int c):数字
5.int isgraph(int c):可打印的(排除空格)
6.int islower(int c):小写字母
7.int isprint(int c):可打印的(包括空格)
8.int ispunct(int c):可打印的(包括空格、字母或数字之外)
9.int isspace(int c):空格
10.int isupper(int c):大写字母
11.int isxidigit(int c):十六进制数字
2.字符大小写转换函数
字符大小转换函数主要用于字母大小写转换
int tolower(int c)
当c为大写字母时,则返回对应的小写字母,否则返回原来的值。
int toupper(int c)
当c为小写英文字母时,则返回对应的大写字母,否则返回原来的值。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了C语言中一些常用库函数的使用,而C语言提供了大量能使我们快速便捷地处理数据和执行各种操作的函数和方法。通过这些库函数,我们可以高效地进行数学计算、字符处理、时间管理、内存分配以及输入输出操作,极大地提高了编程的效率和程序的性能。