C语言函数大全--w 开头的函数(3)
总览
函数声明 | 函数功能 |
---|---|
wchar_t *wcsdup(const wchar_t *str); |
用于复制宽字符字符串 |
int wcsicmp(const wchar_t *s1, const wchar_t *s2); |
用于比较两个宽字符字符串的大小写不敏感的差异 |
int wcsicoll(const wchar_t *s1, const wchar_t *s2); |
用于比较两个宽字符字符串的大小写不敏感的差异, 并考虑当前本地环境的语言和排序规则 |
wchar_t *wcslwr(wchar_t *str); |
用于将宽字符字符串转换为小写字母形式 |
wchar_t *wcspbrk(const wchar_t *str, const wchar_t *charset); |
用于在宽字符字符串中查找指定字符集中任意一个字符第一次出现的位置 |
int wcsnicmp(const wchar_t *s1, const wchar_t *s2, size_t n); |
用于比较两个宽字符字符串的前若干个字符的大小写不敏感的差异 |
wchar_t *wcsnset(wchar_t *str, wchar_t ch, size_t n); |
用于将宽字符字符串中的前若干个字符设置为指定字符 |
wchar_t *wcsrev(wchar_t *str); |
用于将宽字符字符串反转 |
wchar_t *wcsset(wchar_t *str, wchar_t ch); |
用于将宽字符字符串中的所有字符设置为指定字符 |
long int wcstoll(const wchar_t* str, wchar_t** endptr, int base); |
用于将宽字符串转换为长整形 |
unsigned long long int wcstoull(const wchar_t* str, wchar_t** endptr, int base); |
用于将宽字符串转换为无符号长整型 |
wchar_t* wcsupr(wchar_t* str); |
用于将宽字符串转换为大写 |
wctrans_t wctrans(const char* property); |
用于创建字符转换描述符 |
wchar_t* wmempcpy(wchar_t* dest, const wchar_t* src, size_t n); |
用于将将源宽字符串的前 n 个字节的内容拷贝到目标字符串中 |
wchar_t* wmemmove(wchar_t* dest, const wchar_t* src, size_t n); |
将源宽字符串中指定数量的字节复制到目标宽字符串中,即使目标内存和源内存重叠 |
1. wcsdup
1.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcsdup(const wchar_t *str); |
用于复制宽字符字符串 |
参数:
- str : 待复制的宽字符串
返回值:
- 如果成功复制,则返回指向该内存块的指针;
- 如果内存分配失败,函数将返回
NULL
。
1.2 演示示例
1 | #include <stdio.h> |
1.3 运行结果
2. wcsicmp
2.1 函数说明
函数声明 | 函数功能 |
---|---|
int wcsicmp(const wchar_t *s1, const wchar_t *s2); |
用于比较两个宽字符字符串的大小写不敏感的差异 |
参数:
- s1 : 待比较的宽字符串1
- s2 : 待比较的宽字符串2
返回值:
- 如果
s1
指向的字符串按字典顺序小于s2
指向的字符串(忽略大小写),则函数返回一个负整数; - 如果
s1
等于s2
,则函数返回0
; - 如果
s1
指向的字符串按字典顺序大于s2
指向的字符串(忽略大小写),则函数返回一个正整数。
2.2 演示示例
1 | #include <stdio.h> |
2.3 运行结果
3. wcsicoll
3.1 函数说明
函数声明 | 函数功能 |
---|---|
int wcsicoll(const wchar_t *s1, const wchar_t *s2); |
用于比较两个宽字符字符串的大小写不敏感的差异, 并考虑当前本地环境的语言和排序规则 |
参数:
- s1 : 待比较的宽字符串1
- s2 : 待比较的宽字符串2
返回值:
- 如果
s1
指向的字符串按字典顺序小于s2
指向的字符串(忽略大小写),则函数返回一个负整数; - 如果
s1
等于s2
,则函数返回0
; - 如果
s1
指向的字符串按字典顺序大于s2
指向的字符串(忽略大小写),则函数返回一个正整数。
3.2 演示示例
1 | #include <stdio.h> |
注意: 在使用 wcsicoll()
函数前,需要先调用 setlocale()
函数设置本地环境。
3.3 运行结果
4. wcslwr
4.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcslwr(wchar_t *str); |
用于将宽字符字符串转换为小写字母形式 |
参数:
- str : 待转换的宽字符串
4.2 演示示例
1 | #include <stdio.h> |
4.3 运行结果
5. wcspbrk
5.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcspbrk(const wchar_t *str, const wchar_t *charset); |
用于在宽字符字符串中查找指定字符集中任意一个字符第一次出现的位置 |
参数:
- str : 要搜索的宽字符字符串
- charset : 要搜索的宽字符集合
wcspbrk()
函数会将 str
指向的宽字符字符串中的每个字符与 charset
指向的宽字符集合中的字符进行比较,直到找到其中任意一个相同的字符为止。
返回值:
- 如果找到了这样的字符,则函数返回指向该字符的指针;
- 否则,函数返回
NULL
。
5.2 演示示例
1 | #include <stdio.h> |
5.3 运行结果
6. wcsnicmp
6.1 函数说明
函数声明 | 函数功能 |
---|---|
int wcsnicmp(const wchar_t *s1, const wchar_t *s2, size_t n); |
用于比较两个宽字符字符串的前若干个字符的大小写不敏感的差异 |
参数:
- s1 : 待比较的宽字符串1
- s2 : 待比较的宽字符串2
- n : 要比较的字符数目
返回值:
- 如果
s1
指向的字符串按字典顺序小于s2
指向的字符串(忽略大小写),则函数返回一个负整数; - 如果
s1
等于s2
,则函数返回0
; - 如果
s1
指向的字符串按字典顺序大于s2
指向的字符串(忽略大小写),则函数返回一个正整数。
6.2 演示示例
1 | #include <stdio.h> |
6.3 运行结果
7. wcsnset
7.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcsnset(wchar_t *str, wchar_t ch, size_t n); |
用于将宽字符字符串中的前若干个字符设置为指定字符 |
参数:
- s1 : 要修改的宽字符字符串
- s2 : 要设置的宽字符
- n : 要设置的宽字符数目
7.2 演示示例
1 | #include <stdio.h> |
7.3 运行结果
8. wcsrev
8.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcsrev(wchar_t *str); |
用于将宽字符字符串反转 |
参数:
- s1 : 要反转的宽字符字符串
8.2 演示示例
1 | #include <stdio.h> |
8.3 运行结果
9. wcsset
9.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcsset(wchar_t *str, wchar_t ch); |
用于将宽字符字符串中的所有字符设置为指定字符 |
参数:
- str : 要修改的宽字符字符串
- ch : 要设置的宽字符
9.2 演示示例
1 | #include <stdio.h> |
注意: wcsset()
函数会修改原始字符串,因此需要在操作前确保原始字符串可以被修改。
9.3 运行结果
10. wcstoll
10.1 函数说明
函数声明 | 函数功能 |
---|---|
long int wcstoll(const wchar_t* str, wchar_t** endptr, int base); |
用于将宽字符串转换为长整形 |
参数:
- str : 要转换成长整型的宽字符串
- endptr : 一个指向指针的指针,可用于检测是否发生了转换错误,并且返回第一个无法被识别的宽字符位置。当该值为
nullptr
时,不会返回无法被识别的宽字符位置 - base : 进制数,默认为 10
10.2 演示示例
1 | #include <stdio.h> |
10.3 运行结果
11. wcstoull
11.1 函数说明
函数声明 | 函数功能 |
---|---|
unsigned long long int wcstoull(const wchar_t* str, wchar_t** endptr, int base); |
用于将宽字符串转换为无符号长整型 |
参数:
- str : 要转换成无符号长整型的宽字符串
- endptr : 一个指向指针的指针,可用于检测是否发生了转换错误,并且返回第一个无法被识别的宽字符位置。当该值为
nullptr
时,不会返回无法被识别的宽字符位置 - base : 进制数,默认为 10
11.2 演示示例
1 | #include <stdio.h> |
wcstoull()
函数的用法和 wcstoll()
函数类似,不再赘述了。
11.3 运行结果
12. wcsupr
12.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t* wcsupr(wchar_t* str); |
用于将宽字符串转换为大写 |
参数:
- str : 要转换为大写的宽字符串
12.2 演示示例
1 | #include <stdio.h> |
12.3 运行结果
13. wctrans
13.1 函数说明
函数声明 | 函数功能 |
---|---|
wctrans_t wctrans(const char* property); |
用于创建字符转换描述符 |
wint_t towctrans(wint_t wc, wctrans_t desc); |
通过 wctrans() 函数创建的字符转换描述符,可以将一个字符或字符串进行指定类型的转换。 |
wctrans 参数:
- property : 转换属性名称
towctrans 参数:
- wc : 待转换的字符
- desc : 转换描述符
13.2 演示示例
1 | #include <stdio.h> |
13.3 运行结果
14. wmempcpy
14.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t* wmempcpy(wchar_t* dest, const wchar_t* src, size_t n); |
用于将将源宽字符串的前 n 个字节的内容拷贝到目标字符串中 |
参数:
- dest : 目标宽字符串
- src : 源宽字符串
- n : 要拷贝的字节数
14.2 演示示例
1 | #include <stdio.h> |
14.3 运行结果
15. wmemmove
15.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t* wmemmove(wchar_t* dest, const wchar_t* src, size_t n); |
将源宽字符串中指定数量的字节复制到目标宽字符串中,即使目标内存和源内存重叠 |
参数:
- dest : 目标宽字符串
- src : 源宽字符串
- n : 要移动的字节数
15.2 演示示例
1 | #include <stdio.h> |
15.3 运行结果
C语言函数大全--w 开头的函数(2)
总览
函数声明 | 函数功能 |
---|---|
wchar_t *wcstok(wchar_t *wcs, const wchar_t *delim, wchar_t **ptr); |
用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |
wchar_t *wcstok(wchar_t *wcs, const wchar_t *delim); |
用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |
long int wcstol(const wchar_t* str, wchar_t** endptr, int base); |
用于将字符串转换为长整型数字的函数 |
unsigned long int wcstoul(const wchar_t* str, wchar_t** endptr, int base); |
用于将字符串转换为无符号长整型数字 |
size_t wcsxfrm(wchar_t* dest, const wchar_t* src, size_t n); |
将一个 Unicode 字符串转换为一个 “可排序” 的字符串。该新字符串中的字符序列反映了源字符串中的字符顺序和大小写信息,以便进行字典序比较。 |
wctype_t wctype(const char* property); |
用于确定给定的宽字符类别 |
int wctob(wint_t wc); |
用于将给定的宽字符转换为其对应的字节表示 |
int wctomb(char* s, wchar_t wc); |
用于将给定的宽字符转换为其对应的多字节字符表示 |
void* wmemchr(const void* s, wchar_t c, size_t n); |
用于在宽字符数组中查找给定的宽字符 |
int wmemcmp(const wchar_t* s1, const wchar_t* s2, size_t n); |
用于比较两个宽字符数组的前 n 个宽字符 |
wchar_t* wmemcpy(wchar_t* dest, const wchar_t* src, size_t n); |
用于将一个宽字符数组的前 n 个宽字符复制到另一个宽字符数组 |
wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n); |
用于将一个宽字符数组的前 n 个宽字符设置为给定的宽字符值 |
int wprintf(const wchar_t* format, ...); |
用于格式化输出宽字符字符串 |
ssize_t write(int fd, const void* buf, size_t count); |
用于将数据写入文件描述符 |
int wscanf(const wchar_t* format, ...); |
用于从标准输入流(stdin)读取格式化的宽字符输入 |
1. wcstok
1.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcstok(wchar_t *wcs, const wchar_t *delim, wchar_t **ptr); |
用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |
wchar_t *wcstok(wchar_t *wcs, const wchar_t *delim); |
用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地址 |
参数:
- wcs : 被分割的字符串
- delim : 分割符字符串,包含多个字符
- ptr : 指向保存上次调用后的指针的指针,首次调用时需赋值为
NULL
1.2 演示示例
windows 下两个参数的示例:
1 | #include <wchar.h> |
1.3 运行结果
2. wcstol
2.1 函数说明
函数声明 | 函数功能 |
---|---|
long int wcstol(const wchar_t* str, wchar_t** endptr, int base); |
用于将字符串转换为长整型数字的函数 |
参数:
- str : 要转换的字符串
- endptr : 可选输出参数,指向第一个不能转换成数字字符的字符的指针
- base : 数字基数,介于
2
和36
之间;
当base
参数为0
时,wcstol()
函数会自动检测数字基数:- 如果输入字符串以
"0x"
或"0X"
开头,则将基数设置为16
。 - 如果输入字符串以
"0"
开头,则将基数设置为8
。 - 如果不是这些情况,则将基数设置为
10
。
- 如果输入字符串以
2.2 演示示例
1 | #include <stdio.h> |
注意: 如果输入字符串无法转换为数字,则 wcstol()
函数返回 0
,并将 endptr
指向输入字符串的起始位置。所以,在使用 wcstol()
函数时,建议检查 endptr
和 str
是否相同,以确定输入是否有效。
2.3 运行结果
3. wcstoul
3.1 函数说明
函数声明 | 函数功能 |
---|---|
unsigned long int wcstoul(const wchar_t* str, wchar_t** endptr, int base); |
用于将字符串转换为无符号长整型数字 |
参数:
- str : 要转换的字符串
- endptr : 可选输出参数,指向第一个不能转换成数字字符的字符的指针
- base : 数字基数,介于
2
和36
之间;
当base
参数为0
时,wcstol()
函数会自动检测数字基数:- 如果输入字符串以
"0x"
或"0X"
开头,则将基数设置为16
。 - 如果输入字符串以
"0"
开头,则将基数设置为8
。 - 如果不是这些情况,则将基数设置为
10
。
- 如果输入字符串以
3.2 演示示例
1 | #include <stdio.h> |
wcstoul()
函数的用法和 wcstol()
函数类似,这里就不一一列举了
3.3 运行结果
4. wcsxfrm
4.1 函数说明
函数声明 | 函数功能 |
---|---|
size_t wcsxfrm(wchar_t* dest, const wchar_t* src, size_t n); |
将一个 Unicode 字符串转换为一个 “可排序” 的字符串。该新字符串中的字符序列反映了源字符串中的字符顺序和大小写信息,以便进行字典序比较。 |
参数:
- dest : 存储转换后字符串的目标缓冲区
- src: 要转换的源字符串
- n : 目标缓冲区的最大长度
4.2 演示示例
1 | #include <stdlib.h> |
在上面的示例代码中,
- 首先,我们定义一个包含
5
个Unicode
字符串的字符串数组arr
,每个字符串代表一个人名; - 然后,定义一个大小为
5x50
的二维字符数组sorted_arr
,用于存储排序后的字符串; - 接着,使用
wcsxfrm()
函数将每个Unicode
字符串转换为可排序字符串,并将结果存储在sorted_arr
数组中; - 再然后,使用
qsort()
函数按字典序对sorted_arr
数组中的字符串进行排序; - 再接着,使用
wprintf()
函数输出排序后的字符串; - 最后结束程序。
4.3 运行结果
5. wctype
5.1 函数说明
函数声明 | 函数功能 |
---|---|
wctype_t wctype(const char* property); |
用于确定给定的宽字符类别 |
参数:
- property : 一个指向表示宽字符属性名称的字符串字面量的指针
常见的宽字符属性及含义如下:
属性名称 | 含义 |
---|---|
"alnum" |
字母数字字符 |
"alpha" |
字母字符 |
"blank" |
空格或水平制表符字符 |
"cntrl" |
控制字符 |
"digit" |
数字字符 |
"graph" |
可打印字符(除空格字符外) |
"lower" |
小写字母字符 |
"print" |
可打印字符 |
"punct" |
标点符号字符 |
"space" |
空白字符 |
"upper" |
大写字母字符 |
"xdigit" |
十六进制数字字符 |
返回值:
- 如果指定的属性存在,则返回相应的宽字符类型;
- 如果指定的属性不存在,则返回零。
5.2 演示示例
1 | #include <stdio.h> |
注意: 在调用 wctype()
函数时,应该传递一个有效的宽字符属性名称作为参数,详见 5.1 的表格所示。
5.3 运行结果
6. wctob
6.1 函数说明
函数声明 | 函数功能 |
---|---|
int wctob(wint_t wc); |
用于将给定的宽字符转换为其对应的字节表示 |
参数:
- wc : 一个宽字符值
返回值:
- 如果能转换成功,则返回返回与之对应的字节表示;
- 如果无法将给定宽字符转换为字节表示,则返回
EOF
。
6.2 演示示例
1 | #include <stdio.h> |
注意: 在使用 wctob()
函数时,应该确保系统当前的本地化环境和编码方式与程序中使用的字符编码一致。如果字符编码不一致,可能会导致错误的结果或未定义行为。
6.3 运行结果
7. wctomb
7.1 函数说明
函数声明 | 函数功能 |
---|---|
int wctomb(char* s, wchar_t wc); |
用于将给定的宽字符转换为其对应的多字节字符表示 |
参数:
- s : 一个指向字符数组的指针
- wc : 一个宽字符值
返回值:
- 如果能转换成功,则将
wc
转换为其对应的多字节字符表示,存储在s
指向的字符数组中; - 如果
s
是空指针,则不执行任何操作,只返回转换所需的字符数; - 如果无法将给定宽字符转换为多字节字符表示,则返回
-1
。
7.2 演示示例
1 | #include <stdio.h> |
在上面的示例程序中,wctomb()
函数被用来将 Unicode
字符 ','
转换为其对应的多字节字符表示,并将结果保存在字符数组 mb
中。然后,程序输出每个字节的十六进制值。
注意: 在使用 wctomb()
函数时,应该根据当前的本地化环境和编码方式调整字符数组的大小。可以使用 MB_CUR_MAX
宏来获取当前编码方式下一个多字节字符所需的最大字节数,从而确定字符数组的大小。
7.3 运行结果
8. wmemchr
8.1 函数说明
函数声明 | 函数功能 |
---|---|
void* wmemchr(const void* s, wchar_t c, size_t n); |
用于在宽字符数组中查找给定的宽字符 |
参数:
- s : 一个指向宽字符数组的指针
- c : 要查找的宽字符值
- n : 要搜索的字节数
返回值:
- 如果找到了
c
,则返回指向该位置的指针; - 否则返回空指针。
8.2 演示示例
1 | #include <stdio.h> |
8.3 运行结果
9. wmemcmp
9.1 函数说明
函数声明 | 函数功能 |
---|---|
int wmemcmp(const wchar_t* s1, const wchar_t* s2, size_t n); |
用于比较两个宽字符数组的前 n 个宽字符 |
参数:
- s1 : 待比较的宽字符串1
- s2 : 待比较的宽字符串2
- n : 要比较的字节数
返回值:
- 如果两个数组相等,则返回零;
- 如果
s1
比s2
小,则返回负数; - 如果
s1
比s2
大,则返回正数。
9.2 演示示例
1 | #include <stdio.h> |
9.3 运行结果
10. wmemcpy
10.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t* wmemcpy(wchar_t* dest, const wchar_t* src, size_t n); |
用于将一个宽字符数组的前 n 个宽字符复制到另一个宽字符数组 |
参数:
- dest : 目标宽字符串
- src : 源宽字符串
- n : 要复制的字节数
10.2 演示示例
1 | #include <stdio.h> |
注意: 在使用 wmemcpy()
函数时,应该确保目标数组有足够的空间来存储源数组的内容,以免发生缓冲区溢出。在上面的示例中,我们使用 wcslen()
函数来获取源数组的长度,然后加上 1
,以包括字符串结尾的空字符 '\0'
。
10.3 运行结果
11. wmemset
11.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n); |
用于将一个宽字符数组的前 n 个宽字符设置为给定的宽字符值 |
参数:
- s : 一个指向宽字符数组的指针
- c : 要设置的宽字符值
- n : 要设置的字节数
11.2 演示示例
1 | #include <stdio.h> |
在上面的示例程序中,
- 首先,我们定义一个宽字符数组 str,并初始化为
"Hello Huazie!"
; - 接着,调用
wprintf()
函数输出修改之前的宽字符数组str
; - 然后,调用
wmemset()
函数将宽字符数组str
的所有元素都设置为‘X’
; - 最后,再调用
wprintf()
函数输出修改之后的宽字符数组str
,并结束程序。
11.3 运行结果
12. wprintf
12.1 函数说明
函数声明 | 函数功能 |
---|---|
int wprintf(const wchar_t* format, ...); |
用于格式化输出宽字符字符串 |
参数:
- format : 一个宽字符格式化字符串
- … : 可选参数
12.2 演示示例
1 | #include <stdio.h> |
12.3 运行结果
13. write
13.1 函数说明
函数声明 | 函数功能 |
---|---|
ssize_t write(int fd, const void* buf, size_t count); |
用于将数据写入文件描述符 |
参数:
- fd : 要写入的文件描述符
- buf: 写入数据的缓冲区
- count: 写入的字节数
返回值:
- 如果写入成功,则返回实际写入的字节数;
- 如果出现错误,则返回
-1
。
13.2 演示示例
1 | #include <stdio.h> |
注意: 在使用 write()
函数时,应该确保给定的文件描述符是有效的,并且缓冲区中有足够的数据可供写入,以免发生未定义的行为
13.3 运行结果
14. wscanf
14.1 函数说明
函数声明 | 函数功能 |
---|---|
int wscanf(const wchar_t* format, ...); |
用于从标准输入流(stdin)读取格式化的宽字符输入 |
参数:
- format : 一个宽字符格式化字符串
- … : 可选参数
14.2 演示示例
1 | #include <stdio.h> |
14.3 运行结果
C语言函数大全--w 开头的函数(1)
总览
函数声明 | 函数功能 |
---|---|
wchar_t * wcscat(wchar_t *dest, const wchar_t *src); |
用于将一个宽字符字符串追加到另一个宽字符字符串的末尾 |
wchar_t *wcschr(const wchar_t *str, wchar_t wc); |
用于在宽字符串中查找指定字符的位置 |
int wcscmp(const wchar_t *str1, const wchar_t *str2); |
用于比较两个宽字符串的大小;它将两个字符串逐个字符进行比较,直到遇到不同的字符或者其中一个字符串结束为止 |
int wcscoll(const wchar_t *str1, const wchar_t *str2); |
用于比较两个宽字符串的大小 |
wchar_t *wcscpy(wchar_t *dest, const wchar_t *src); |
用于将一个宽字符串复制到另一个字符串中 |
size_t wcsftime(wchar_t *str, size_t maxsize, const wchar_t *format, const struct tm *timeptr); |
用于将日期和时间格式化为宽字符字符串 |
size_t wcslen(const wchar_t *str); |
用于计算宽字符串的长度 |
wchar_t *wcsncat(wchar_t *dest, const wchar_t *src, size_t n); |
用于将一个宽字符串的一部分追加到另一个宽字符串末尾 |
int wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t n); |
用于比较两个宽字符串的前若干个字符是否相同 |
wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t n); |
用于将一个宽字符串的一部分复制到另一个宽字符串中 |
size_t wcsrtombs(char *dest, const wchar_t **src, size_t n, mbstate_t *ps); |
用于将宽字符串转换为多字节字符串 |
wchar_t *wcsstr(const wchar_t *haystack, const wchar_t *needle); |
用于在一个宽字符串中查找另一个宽字符串 |
size_t wcsspn(const wchar_t *str, const wchar_t *accept); |
用于查找宽字符串中连续包含某些字符集合中的字符的最长前缀 |
double wcstod(const wchar_t *nptr, wchar_t **endptr); |
用于将宽字符串转换为双精度浮点数 |
1. wcscat
1.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t * wcscat(wchar_t *dest, const wchar_t *src); |
用于将一个宽字符字符串追加到另一个宽字符字符串的末尾 |
参数:
- dest : 目标字符串
- src : 源字符串
1.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 首先,我们定义了一个大小为
30
的wchar_t
数组dest
,并初始化为"Hello"
; - 然后,定义了一个指向常量宽字符串的指针
src
,指向字符串", Huazie!"
; - 接着。调用
wcscat()
函数将src
字符串中的所有字符追加到dest
字符串的末尾,形成新的宽字符字符串"Hello, Huazie!"
; - 最后,使用
wprintf()
函数将新的字符串输出到控制台。
注意: 在使用 wcscat()
函数时,需要确保目标字符串 dest
的空间足够大,以容纳源字符串 src
的所有字符和一个结束符(\0
)。如果目标字符串的空间不足,可能会导致数据覆盖和未定义行为。
1.3 运行结果
2. wcschr
2.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcschr(const wchar_t *str, wchar_t wc); |
用于在宽字符串中查找指定字符的位置 |
参数:
- str : 要查找的宽字符串
- wc : 要查找的宽字符
返回值:
- 如果在
str
字符串中查找到第一个与wc
相等的宽字符,则返回该字符在字符串中的地址; - 否则没有找到匹配字符,则返回空指针。
2.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 首先,我们定义了一个宽字符串
str
,并初始化为"hello, huazie"
; - 然后,定义了一个宽字符
c
,值为'u'
; - 接着调用
wcschr()
函数在 str 字符串中查找字符c
,并将返回结果保存在指针变量p
中; - 最后,根据返回值判断是否找到了匹配字符,并输出相应的信息。
2.3 运行结果
3. wcscmp
3.1 函数说明
函数声明 | 函数功能 |
---|---|
int wcscmp(const wchar_t *str1, const wchar_t *str2); |
用于比较两个宽字符串的大小;它将两个字符串逐个字符进行比较,直到遇到不同的字符或者其中一个字符串结束为止 |
参数:
- str1: 待比较的宽字符串1
- str2: 待比较的宽字符串2
返回值:
- 如果
str1
小于str2
,则返回一个负整数; - 如果
str1
等于str2
,则返回 0; - 如果
str1
大于str2
,则返回一个正整数。
3.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 首先,我们定义了两个宽字符串
str1
和str2
,分别初始化为"hello"
和"huazie"
; - 然后,调用
wcscmp()
函数比较两个字符串的大小,并将返回结果保存在变量result
中; - 接着根据
result
的值,输出相应的比较结果; - 最后结束程序。
3.3 运行结果
4. wcscoll
4.1 函数说明
函数声明 | 函数功能 |
---|---|
int wcscoll(const wchar_t *str1, const wchar_t *str2); |
用于比较两个宽字符串的大小 |
参数:
- str1: 待比较的宽字符串1
- str2: 待比较的宽字符串2
4.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 首先,我们调用
setlocale()
函数设置本地化环境为当前系统默认设置; - 然后,定义了两个宽字符串
str1
和str2
,分别初始化为 “hello” 和 “huazie”; - 接着,调用
wcscoll()
函数比较两个字符串的大小,并将返回结果保存在变量result
中。 - 最后根据
result
的值,输出相应的比较结果。
注意: 在使用 wcscoll()
函数比较宽字符串大小时,需要确保本地化环境正确设置,以便该函数能够正常工作。如果没有设置本地化环境或者设置错误,可能会导致比较结果不准确。
4.3 运行结果
5. wcscpy
5.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcscpy(wchar_t *dest, const wchar_t *src); |
用于将一个宽字符串复制到另一个字符串中 |
参数:
- dest : 目标字符串
- src : 源字符串
5.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 首先,我们定义了一个大小为
20
的wchar_t
数组dest
; - 然后,定义了一个指向常量宽字符串的指针
src
,指向字符串 “Hello, huazie!”; - 接着,调用
wcscpy()
函数将src
字符串中的所有字符复制到dest
字符串中,形成新的宽字符字符串dest
; - 最后,使用
wprintf()
函数将新的字符串输出到控制台。
5.3 运行结果
6. wcsftime
6.1 函数说明
函数声明 | 函数功能 |
---|---|
size_t wcsftime(wchar_t *str, size_t maxsize, const wchar_t *format, const struct tm *timeptr); |
用于将日期和时间格式化为宽字符字符串 |
参数:
- str : 输出结果的缓冲区
- maxsize : 缓冲区的大小
- format : 格式化字符串
- timeptr : 包含日期和时间信息的结构体指针
6.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 首先,我们定义了一个变量
current_time
来存储当前时间,以及一个指向struct tm
类型的指针time_info
; - 然后,调用
time()
函数获取当前时间,并使用localtime()
函数将时间转换为本地时间,存储在time_info
指针变量中; - 接着,调用
wcsftime()
函数将日期和时间格式化为宽字符字符串,并存储到缓冲区buffer
中; - 最后,使用
wprintf()
函数输出格式化后的字符串。
6.3 运行结果
7. wcslen
7.1 函数说明
函数声明 | 函数功能 |
---|---|
size_t wcslen(const wchar_t *str); |
用于计算宽字符串的长度 |
参数:
- str : 要计算长度的宽字符串
7.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 首先,我们定义了一个指向常量宽字符串的指针
str
,指向字符串"Hello, huazie!"
; - 然后,调用
wcslen()
函数计算str
字符串的长度,并将结果保存在变量len
中; - 最后,使用
wprintf()
函数输出字符串的长度。
7.3 运行结果
8. wcsncat
8.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcsncat(wchar_t *dest, const wchar_t *src, size_t n); |
用于将一个宽字符串的一部分追加到另一个宽字符串末尾 |
参数:
- dest : 目标字符串
- src : 源字符串
- n : 要追加的字符数
8.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 首先,我们定义了一个大小为
20
的wchar_t
数组dest
,并初始化为"Hello, "
; - 然后,定义了一个指向常量宽字符串的指针
src
,指向字符串"huazie!"
。 - 接着,调用
wcsncat()
函数将src
字符串中的前3
个字符追加到dest
字符串的末尾,形成新的宽字符字符串dest
; - 最后,使用
wprintf()
函数将新的字符串输出到控制台。
8.3 运行结果
9. wcsncmp
9.1 函数说明
函数声明 | 函数功能 |
---|---|
int wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t n); |
用于比较两个宽字符串的前若干个字符是否相同 |
参数:
- str1 : 待比较的宽字符串1
- str2 : 待比较的宽字符串2
- n : 要比较的字符数
返回值:
将字符串 str1
和字符串 str2
中的前 n
个字符进行比较
- 如果两个字符串相同,返回值为
0
; - 如果字符串
str1
在前n
个字符中的第一个不同于字符串str2
对应字符的字符大于字符串str2
对应字符的字符,返回值为正数; - 如果字符串
str1
在前n
个字符中的第一个不同于字符串str2
对应字符的字符小于字符串str2
对应字符的字符,返回值为负数。
9.2 演示示例
1 | #include <stdio.h> |
9.3 运行结果
10. wcsncpy
10.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t n); |
用于将一个宽字符串的一部分复制到另一个宽字符串中 |
参数:
- dest : 目标字符串
- src : 源字符串
- n : 要复制的字符数
10.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 首先,我们定义了一个大小为
20
的wchar_t
数组dest
,以及一个指向常量宽字符串的指针src
,指向字符串"Hello, huazie!"
; - 然后,调用
wcsncpy()
函数将src
字符串中的前5
个字符复制到dest
字符串中,形成新的宽字符字符串dest
; - 最后,手动添加空字符
\0
以确保字符串结束,并使用wprintf()
函数将新的字符串输出到控制台。
10.3 运行结果
11. wcsrtombs
11.1 函数说明
函数声明 | 函数功能 |
---|---|
size_t wcsrtombs(char *dest, const wchar_t **src, size_t n, mbstate_t *ps); |
用于将宽字符串转换为多字节字符串 |
参数:
- dest : 输出结果的缓冲区
- src : 指向源字符串的指针
- n : 要转换的最大字符数
- ps : 一个指向转换状态的指针
11.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 首先,我们调用
setlocale()
函数设置程序的本地化环境,以便可以正确地进行宽字符和多字节字符之间的转换; - 然后,定义了一个指向常量宽字符串的指针
src
,指向字符串"Hello, huazie!"
; - 接着,根据源字符串的长度分配了足够大小的缓冲区
dest
,并初始化为0
; - 再然后,调用
wcsrtombs()
函数将宽字符串src
转换为多字节字符串,并存储到缓冲区dest
中; - 最后,使用
printf()
函数输出多字节字符串,并释放目标缓存区的内存。
注意: 在使用 wcsrtombs()
函数进行宽字符和多字节字符转换时,需要确保程序的本地化环境已经正确设置,否则可能会导致转换失败或者输出结果不正确。此外,在分配缓冲区 dest
的大小时,可以考虑将源字符串的长度加 1
,以容纳字符串的结尾空字符(\0
)。最后在使用完毕后要记得释放缓冲区的内存。
11.3 运行结果
12. wcsstr
12.1 函数说明
函数声明 | 函数功能 |
---|---|
wchar_t *wcsstr(const wchar_t *haystack, const wchar_t *needle); |
用于在一个宽字符串中查找另一个宽字符串 |
参数:
- haystack : 要查找的宽字符串
- needle : 要查找的子串
返回值:
- 如果从
haystack
字符串中查找到第一个匹配needle
子串的位置,则返回指向匹配位置的指针; - 否则未找到匹配的子串,返回空指针(
NULL
)。
12.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 首先,我们定义了一个指向常量宽字符串的指针
haystack
,指向字符串"Hello, huazie!"
。 - 然后,定义了一个指向常量宽字符串的指针
needle
,指向字符串"huazie"
; - 接着,调用
wcsstr()
函数在haystack
字符串中查找子串needle
,并将结果指针保存在变量result
中。 - 最后,根据
result
的值,输出相应的查找结果。
注意: 在使用 wcsstr()
函数查找子串时,该函数会自动遍历整个字符串,直到找到匹配的子串或者结束字符串。如果要查找的子串在字符串中多次出现,该函数将返回第一次出现的位置,并不会考虑后续的匹配。
12.3 运行结果
13. wcsspn
13.1 函数说明
函数声明 | 函数功能 |
---|---|
size_t wcsspn(const wchar_t *str, const wchar_t *accept); |
用于查找宽字符串中连续包含某些字符集合中的字符的最长前缀 |
参数:
- str : 要查找的宽字符串
- accept : 一个包含要接受字符集合的宽字符串
13.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 首先,我们定义了一个指向常量宽字符串的指针
str
,指向字符串"123456789a0"
; - 然后,定义了一个指向常量宽字符串的指针
accept
,指向字符串"0123456789"
,表示数字字符的集合; - 接着,调用
wcsspn()
函数查找str
字符串中连续包含数字字符集合中的字符的最长前缀,并将返回结果保存在变量length
中。 - 最后,根据
length
的值,调用wprintf()
函数 输出 最长前缀的长度。
注意: 在使用 wcsspn()
函数查找宽字符串中的字符集合时,该函数会自动遍历整个字符串,直到找到第一个不在字符集合中的字符或者结束字符串。如果要查找的字符集合为空串,则返回 0
。
13.3 运行结果
14. wcstod
14.1 函数说明
函数声明 | 函数功能 |
---|---|
double wcstod(const wchar_t *nptr, wchar_t **endptr); |
用于将宽字符串转换为双精度浮点数 |
参数:
- nptr : 要转换的宽字符串
- endptr : 一个指向指针的指针,用于存储第一个无法解析的字符的位置
返回值:
- 如果从
nptr
字符串中解析出一个双精度浮点数,则返回该数值; - 如果
nptr
字符串不包含有效的浮点数,则返回0
; - 如果存在无法解析的字符,存储其位置到
endptr
指针中。
14.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 首先,我们定义了一个指向常量宽字符串的指针
str
,指向字符串"3.14159265358979323846"
; - 然后,调用
wcstod()
函数将字符串转换为双精度浮点数,并将结果保存在变量number
中。 - 最后,根据函数的返回结果
number
和endptr
指针所指向的值,输出相应的转换结果。
注意: 在使用 wcstod()
函数转换宽字符串为双精度浮点数时,要确保字符串中只包含有效的浮点数表示,否则可能会导致转换错误或者未定义行为。
14.3 运行结果
C语言函数大全--v 开头的函数
总览
函数声明 | 函数功能 |
---|---|
void va_start(va_list ap, last_arg); |
用于初始化一个 va_list 类型的变量,使其指向可变参数列表中的第一个参数 |
type va_arg(va_list ap, type); |
用于从可变参数列表中获取下一个参数,并将其转换为指定的类型 |
void va_copy(va_list dest, va_list src); |
用于将一个 va_list 类型的变量复制到另一个变量中 |
void va_end(va_list ap); |
用于清理一个 va_list 类型的变量 |
int vfprintf(FILE *stream, const char *format, va_list arg); |
用于将格式化输出写入到指定的文件流中 |
int vfscanf(FILE *stream, const char *format, va_list arg); |
用于将指定文件流中的格式化输入读取到指定变量中 |
int vprintf(const char *format, va_list ap); |
它使用格式化字符串 format 中的指令来指定输出的格式,并将后续的可变参数按照指令指定的格式输出到标准输出流 stdout |
int vscanf(const char *format, va_list arg); |
它使用格式化字符串 format 中的指令来指定输入的格式,并从标准输入流 stdin 中读取数据,并将数据按照指令指定的格式存储到相应的变量中 |
int vsprintf(char *str, const char *format, va_list ap); |
它使用格式化字符串 format 中的指令来指定输出的格式,并将后续的可变参数按照指令指定的格式输出到字符数组 str 中。 |
int vsscanf(const char *str, const char *format, va_list ap); |
它使用格式化字符串 format 中的指令来指定输入的格式,并从字符数组 str 中读取数据,并将数据按照指令指定的格式存储到相应的变量中 |
1. va_start
1.1 函数说明
函数声明 | 函数功能 |
---|---|
void va_start(va_list ap, last_arg); |
用于初始化一个 va_list 类型的变量,使其指向可变参数列表中的第一个参数 |
参数:
- ap: 一个指向 va_list 类型的变量的指针,表示要初始化的可变参数列表
- last_arg: 一个指向最后一个固定参数的指针,用于确定可变参数列表的起始位置
1.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 我们首先调用自定义的
print_args()
函数,并传入了 4 个入参,第一个为 可变参数的个数,后面三个为具体的整数型可变参数。 - 然后在
print_args()
函数内部,我们首先定义了两个va_list
类型的变量args1
和args2
,并使用va_start()
函数初始化args1
变量。 - 接着,我们使用
va_copy()
函数将args1
复制到args2
中,并使用for
循环和 两个va_arg()
函数来分别访问这两个可变参数列表,并依次输出每个参数的值。 - 最后,我们使用两次
va_end()
函数来清理这两个可变参数列表。
1.3 运行结果
2. va_arg
2.1 函数说明
函数声明 | 函数功能 |
---|---|
type va_arg(va_list ap, type); |
用于从可变参数列表中获取下一个参数,并将其转换为指定的类型 |
参数:
- ap : 一个指向 va_list 类型的变量的指针,表示要访问的可变参数列表
- type : 一个类型说明符,表示下一个参数的类型
2.2 演示示例
可参考 1.2 中所示
3. va_copy
3.1 函数说明
函数声明 | 函数功能 |
---|---|
void va_copy(va_list dest, va_list src); |
用于将一个 va_list 类型的变量复制到另一个变量中 |
参数:
- dest : 一个指向 va_list 类型的变量的指针,表示目标可变参数列表
- src : 另一个指向 va_list 类型的变量的指针,表示要被复制的可变参数列表
3.2 演示示例
可参考 1.2 中所示
4. va_end
4.1 函数说明
函数声明 | 函数功能 |
---|---|
void va_end(va_list ap); |
用于清理一个 va_list 类型的变量 |
参数:
- ap: 一个指向 va_list 类型的变量的指针,表示要清理的可变参数列表
4.2 演示示例
可参考 1.2 中所示
5. vfprintf
5.1 函数说明
函数声明 | 函数功能 |
---|---|
int vfprintf(FILE *stream, const char *format, va_list arg); |
用于将格式化输出写入到指定的文件流中 |
参数:
- stream : 要写入数据的文件流指针
- format : 格式化字符串,用来指定要输出的内容和格式
- arg : 一个
va_list
类型的变量,包含了可变参数列表
5.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 我们首先声明了三个变量
inumber
、fnumber
和string
; - 然后,调用
tmpfile()
函数创建一个临时文件,并将返回的文件指针赋值给全局变量fp
。如果创建文件失败,则打印错误信息并退出程序; - 接着,调用自定义的
vfpf()
函数来向临时文件中写入数据。它里面使用vfprintf()
函数将格式化输出写入到一个文件流中; - 再然后,调用
rewind()
函数将文件指针重新定位到文件开头; - 再接着使用
fscanf()
函数从文件中读取数据,并使用printf()
函数中输出从文件中读取的数据【其中浮点数部分保留两位小数】 - 最后调用
fclose()
函数关闭文件指针,并结束程序
5.3 运行结果
6. vfscanf
6.1 函数说明
函数声明 | 函数功能 |
---|---|
int vfscanf(FILE *stream, const char *format, va_list arg); |
用于将指定文件流中的格式化输入读取到指定变量中 |
参数:
- stream : 要读取数据的文件流指针
- format : 格式化字符串,用来指定要读取的内容和格式
- arg : 一个
va_list
类型的变量,包含了可变参数列表
返回值:
- 如果读取成功,返回成功读取并赋值给变量的项目数;
- 如果出现错误,则返回负数。
6.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 我们首先声明了三个变量
inumber
、fnumber
和string
; - 然后,程序调用
tmpfile()
函数创建一个临时文件,并将返回的文件指针赋值给全局变量fp
。如果创建文件失败,则打印错误信息并退出程序; - 接着,我们使用
fprintf()
函数将三个数据(一个整型数字、一个浮点数和一个字符串)写入该文件中; - 再然后,调用
rewind()
函数将文件指针重新定位到文件开头; - 再接着,我们调用自定义的
vfsf()
函数,里面使用vfscanf()
函数从文件中读取数据; - 最后,打印出从文件中读取的数据,并关闭临时文件,退出程序。
6.3 运行结果
7. vprintf
7.1 函数说明
函数声明 | 函数功能 |
---|---|
int vprintf(const char *format, va_list ap); |
它使用格式化字符串 format 中的指令来指定输出的格式,并将后续的可变参数按照指令指定的格式输出到标准输出流 stdout |
参数:
- format : 格式化字符串,用来指定要打印的内容和格式
- va_list : 一个
va_list
类型的变量,包含了可变参数列表
7.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 我们首先定义了三个变量 整形
a
、浮点型b
和 字符数组s
; - 然后,调用自定义的
myprint()
函数将这些变量的值输出到标准输出流 stdout 中;
在myprint()
函数中,- 我们首先使用
va_start()
宏初始化一个va_list
变量args
; - 然后调用
vprintf()
函数将格式化字符串和参数列表传递给该函数进行输出; - 最后使用
va_end()
宏清理args
变量。
- 我们首先使用
- 最后结束程序。
7.3 运行结果
8. vscanf
8.1 函数说明
函数声明 | 函数功能 |
---|---|
int vscanf(const char *format, va_list arg); |
它使用格式化字符串 format 中的指令来指定输入的格式,并从标准输入流 stdin 中读取数据,并将数据按照指令指定的格式存储到相应的变量中 |
参数:
- format : 格式化字符串,用来指定要读取的内容和格式
- va_list : 一个
va_list
类型的变量,包含了可变参数列表
8.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 我们首先定义了三个变量 整形
a
、浮点型b
和 字符数组s
; - 然后,调用自定义的
myscan()
函数从标准输入流stdin
中读取数据,并将数据存储到这些变量中
在myscan()
函数中,- 我们首先使用
va_start()
宏初始化一个va_list
变量args
; - 然后调用
vscanf()
函数将格式化字符串和参数列表传递给该函数进行输入; - 最后使用
va_end()
宏清理args
变量。
- 我们首先使用
- 最后我们打印输出上面输入的两个变量的数据,并结束程序。
8.3 运行结果
9. vsprintf
9.1 函数说明
函数声明 | 函数功能 |
---|---|
int vsprintf(char *str, const char *format, va_list ap); |
它使用格式化字符串 format 中的指令来指定输出的格式,并将后续的可变参数按照指令指定的格式输出到字符数组 str 中。 |
参数:
- str: 用来存储格式化数据的字符数组的指针
- format : 格式化字符串,用来指定要输出的内容和格式
- va_list : 一个
va_list
类型的变量,包含了可变参数列表
9.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 我们首先定义了三个变量 整形
a
、浮点型b
和 字符数组s
; - 然后,调用自定义的
myprint()
函数将格式化字符串和这些变量的值输出到字符数组buffer
中,并打印输出字符数组buffer
;
在myprint()
函数中,- 我们首先使用
va_start()
宏初始化一个va_list
变量args
; - 然后调用
vsprintf()
函数将格式化字符串和参数列表传递给该函数进行输出,并将输出结果存储到buffer
数组中; - 最后使用
va_end()
宏清理args
变量。
- 我们首先使用
- 最后结束程序。
9.3 运行结果
10. vsscanf
10.1 函数说明
函数声明 | 函数功能 |
---|---|
int vsscanf(const char *str, const char *format, va_list ap); |
它使用格式化字符串 format 中的指令来指定输入的格式,并从字符数组 str 中读取数据,并将数据按照指令指定的格式存储到相应的变量中 |
参数:
- str: 用来读取的格式化数据的字符数组的指针
- format : 格式化字符串,用来指定要读取的内容和格式
- va_list : 一个
va_list
类型的变量,包含了可变参数列表
10.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 我们首先定义了四个变量 整形
a
、浮点型b
、 字符数组s
和 字符数组buffer
; - 然后,调用自定义的
myscan()
函数从字符数组buffer
中读取数据,并将数据存储到另外3
个变量中;
在myscan()
函数中,- 我们首先使用
va_start()
宏初始化一个va_list
变量args
; - 然后调用
vsscanf()
函数将字符数组buffer
和格式化字符串以及参数列表传递给该函数进行输入,并将数据存储到相应的变量中; - 最后使用
va_end()
宏清理args
变量。
- 我们首先使用
- 最后我们打印输出上面从字符数组
buffer
中读取并输入的三个变量的数据,并结束程序。
10.3 运行结果
参考
C语言函数大全--u 开头的函数
总览
函数声明 | 函数功能 |
---|---|
char *ultoa(unsigned long value, char *str, int base); |
用于将无符号长整型数转换成指定基数下的字符串表示 |
int ungetc(int c, FILE *stream); |
用于将字符推回输入流中 |
int ungetch(int c); |
用于将字符推回输入流中 |
int unix2dos(const char *src_file, const char *dst_file); |
用于将文本文件的行末标志符从 Unix 风格的 \n 转换为 Windows/DOS 风格的 \r\n |
int dos2unix(const char *src_file, const char *dst_file); |
用于将将文本文件的行末标志符从 Windows/DOS 风格的 \r\n 转换为 Unix 风格的 \n |
int unlink(const char *pathname); |
用于删除指定文件 |
int unlock(int handle, long offset, long length); |
它不是标准 C 库中的函数,而是 Linux/Unix 系统下用于文件锁定和解锁的函数 |
BOOL UnlockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh); |
用于对文件进行解锁操作 |
1. ultoa
1.1 函数说明
函数声明 | 函数功能 |
---|---|
char *ultoa(unsigned long value, char *str, int base); |
用于将无符号长整型数转换成指定基数下的字符串表示 |
参数:
- value : 要转换的无符号长整型数
- str : 用于存储转换后的字符串
- base : 要使用的进制数,可以为 2、8、10 或 16
函数 ultoa()
将参数 value
转换为以 base
进制表示的形式,并将结果存储在缓冲区 str
中。如果转换成功,则返回指向 str
的指针。
注意: 函数 ultoa()
不会检查缓冲区是否足够大,因此调用者需要确保缓冲区足够大以避免发生缓冲区溢出。
1.2 演示示例
1 | #include <stdio.h> |
1.3 运行结果
2. ungetc
2.1 函数说明
函数声明 | 函数功能 |
---|---|
int ungetc(int c, FILE *stream); |
用于将字符推回输入流中 |
参数:
- c : 要推回的字符
- stream : 要推回字符的文件指针
2.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,
- 我们首先打开了一个名为
test.txt
的文本文件; - 接着,使用
fgetc()
函数从中读取一个字符; - 然后,我们使用
ungetc()
函数将该字符推回输入流中; - 再接着使用
fgetc()
函数从输入流中读取字符; - 最后,我们使用
printf()
函数将两次读取的字符打印到标准输出流中。
注意: 在使用 ungetc()
函数推回字符之前,必须先读取一个字符并检查其是否成功读取。否则,ungetc()
函数将无法确定将字符推回哪个位置。
2.3 运行结果
3. ungetch
3.1 函数说明
函数声明 | 函数功能 |
---|---|
int ungetch(int c); |
用于将字符推回输入流中 |
参数:
- c : 要推回的字符
3.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,
- 我们首先输出一条提示信息
"Input an integer followed by a char:"
- 接着,通过循环调用
getche()
函数从输入流中逐个读取字符,并检查它是否是数字字符。如果是数字字符,则将其转换为整数并存储在变量i
中。 - 然后,在读取到非数字字符时,使用
ungetch()
函数将该字符推回输入流中,以保留它供后续使用。 - 最后,使用
getch()
函数从输入流中读取一个字符,并打印出读取到的下一个字符和此时i
的值。
注意: getch()
和 ungetch()
函数通常只在 Windows
平台上可用,因此这段代码可能不可移植到其他操作系统或编译器中。
3.3 运行结果
4. unix2dos
4.1 函数说明
函数声明 | 函数功能 |
---|---|
int unix2dos(const char *src_file, const char *dst_file); |
用于将文本文件的行末标志符从 Unix 风格的 \n 转换为 Windows/DOS 风格的 \r\n |
int dos2unix(const char *src_file, const char *dst_file); |
用于将将文本文件的行末标志符从 Windows/DOS 风格的 \r\n 转换为 Unix 风格的 \n |
参数:
- src_file : 要转换的源文件名
- dst_file : 转换后保存到的目标文件名
返回值:
- 如果转换成功,则返回
0
; - 否则返回一个 非零值, 表示错误代码。
4.2 演示示例
1 | #include <stdio.h> |
5. unlink
5.1 函数说明
函数声明 | 函数功能 |
---|---|
int unlink(const char *pathname); |
用于删除指定文件 |
参数:
- pathname : 要删除的文件路径名
5.2 演示示例
1 | #include <stdio.h> |
在上面的示例代码中,我们使用 unlink() 函数删除了当前目录下名为 huazie.txt
的文件。如果 unlink()
函数返回值不为 0
,则说明删除操作失败,可能是由于权限不足、文件不存在或其他原因导致的。如果删除操作成功,则会输出一条简短的提示信息 "File deletion successful"
。
注意: 由于删除操作无法撤销,并且被删除的文件内容将无法恢复,因此在使用 unlink()
函数删除文件时需要小心谨慎,建议在执行此类敏感操作之前进行备份或确认。
5.3 运行结果
6. unlock
6.1 函数说明
函数声明 | 函数功能 |
---|---|
int unlock(int handle, long offset, long length); |
它不是标准 C 库中的函数,而是 Linux/Unix 系统下用于文件锁定和解锁的函数 |
参数:
- handle : 要解锁的文件句柄
- offset: 解锁操作的起始偏移量(以字节为单位)。通常情况下,偏移量应该为正整数,代表从文件开头开始的偏移量。如果
offset
参数小于零,则将从文件末尾开始向前计算偏移量。 - length: 要解锁的字节数
6.2 演示示例
1 | #include <io.h> |
7. UnlockFile
7.1 函数说明
函数声明 | 函数功能 |
---|---|
BOOL UnlockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh); |
用于对文件进行解锁操作 |
参数:
- hFile : 要解锁的文件句柄
- dwFileOffsetLow 和 dwFileOffsetHigh: 解锁操作的起始偏移量(以字节为单位)。由于文件大小可能超过
4GB
,因此需要使用两个参数表示完整的偏移量 - nNumberOfBytesToUnlockLow 和 nNumberOfBytesToUnlockHigh: 要解锁的字节数。同样地,这些参数也需要使用两个参数表示完整的字节数
7.2 演示示例
1 | #include <windows.h> |
在上面的示例代码中,
- 我们首先使用
Windows API
中的CreateFile()
函数打开名为 test.txt 的文件,并获取其文件句柄; - 然后,我们使用
WriteFile()
函数将字符串写入文件; - 接着,我们使用
LockFile()
函数对文件进行锁定操作,并使用UnlockFile()
函数进行解锁操作; - 最后,我们关闭文件句柄并退出程序。
注意:在使用 UnlockFile()
函数时,需要确保已经使用 CreateFile()
或其他文件打开函数打开了文件,并获得了有效的文件句柄。
7.3 运行结果
参考
C语言函数大全--t 开头的函数
总览
函数声明 | 函数功能 |
---|---|
double tan(double x) |
计算 以弧度 x 为单位的角度的正切值(double) |
float tanf(float x) |
计算 以弧度 x 为单位的角度的正切值(float) |
long double tanl(long double x) |
计算 以弧度 x 为单位的角度的正切值(long double) |
double tanh(double x); |
计算 x 的双曲正切值(double) |
float tanhf(float x); |
计算 x 的双曲正切值(float) |
long double tanhl(long double x); |
计算 x 的双曲正切值(long double) |
off_t tell(int fd); |
用于返回文件指针当前位置相对于文件开头的偏移量 |
long int telldir(DIR *dirp); |
获取目录流的当前位置 |
int textheight(char *string); |
用于获取当前文本模式下字符的高度 |
int textwidth(char *string); |
用于获取当前文本模式下字符的宽度 |
time_t time(time_t *timer); |
可以用于获取从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的秒数 |
FILE *tmpfile(void); |
可以用于在临时目录中创建一个唯一的临时文件,并返回文件指针 |
char *tmpnam(char *s); |
用于创建一个唯一的临时文件名 |
int toascii(int c); |
将一个字符转换为其对应的 ASCII 码值 |
int tolower(int c); |
可以用于将一个 ASCII 字符转换为小写字母 |
int toupper(int c); |
可以用于将一个 ASCII 字符转换为大写字母 |
double trunc(double x); |
截取 x 的小数部分,并返回整数部分(double) |
float truncf(float x); |
截取 x 的小数部分,并返回整数部分(float) |
long double truncl(long double x); |
截取 x 的小数部分,并返回整数部分(long double) |
void tzset(void); |
可以用于设置时区信息 |
double tgamma(double x); |
用于计算 Gamma 函数(double) |
float tgammaf(float x); |
用于计算 Gamma 函数(float) |
long double tgammal(long double x); |
用于计算 Gamma 函数(long double) |
1. tan,tanf,tanl
1.1 函数说明
函数声明 | 函数功能 |
---|---|
double tan(double x) |
计算 以弧度 x 为单位的角度的正切值(double) |
float tanf(float x) |
计算 以弧度 x 为单位的角度的正切值(float) |
long double tanl(long double x) |
计算 以弧度 x 为单位的角度的正切值(long double) |
1.2 演示示例
1 | #include <stdio.h> |
1.3 运行结果
2. tanh,tanhf,tanhl
2.1 函数说明
函数声明 | 函数功能 |
---|---|
double tanh(double x); |
计算 x 的双曲正切值(double) |
float tanhf(float x); |
计算 x 的双曲正切值(float) |
long double tanhl(long double x); |
计算 x 的双曲正切值(long double) |
2.2 演示示例
1 | #include <stdio.h> |
2.3 运行结果
3. tell
3.1 函数说明
函数声明 | 函数功能 |
---|---|
off_t tell(int fd); |
用于返回文件指针当前位置相对于文件开头的偏移量 |
参数:
- fd : 是文件描述符,表示要查询的文件
3.2 演示示例
1 | #include <stdio.h> |
在上面这个示例中,
- 首先我们打开了一个名为 test.txt 的文件,并使用
tell()
函数获取了当前的文件偏移量。 - 然后我们用
read()
函数读取了一些数据,并再次使用tell()
函数来获取新的文件偏移量。 - 最后我们使用
close()
函数关闭文件。
注意:tell()
函数和 lseek
函数的功能类似,但有一个重要的区别:tell()
函数只用于查询当前位置,而不能修改文件指针的位置。如果要修改文件指针的位置,请使用 lseek()
函数。
下面我们来看看,使用 lseek()
函数来演示上面的 tell()
函数的示例 :
1 | #include <stdio.h> |
3.3 运行结果
4. telldir
4.1 函数说明
函数声明 | 函数功能 |
---|---|
long int telldir(DIR *dirp); |
获取目录流的当前位置 |
参数:
- dirp : 指向
DIR
类型结构体的指针
4.2 演示示例
1 | #include <stdio.h> |
4.3 运行结果
5. textheight,textwidth
5.1 函数说明
函数声明 | 函数功能 |
---|---|
int textheight(char *string); |
用于获取当前文本模式下字符的高度 |
int textwidth(char *string); |
用于获取当前文本模式下字符的宽度 |
参数:
- string : 要查询的字符串
5.2 演示示例
1 | #include <graphics.h> |
5.3 运行结果
6. time
6.1 函数说明
函数声明 | 函数功能 |
---|---|
time_t time(time_t *timer); |
可以用于获取从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的秒数 |
参数:
- timer : 一个指向
time_t
类型对象的指针,如果不想使用此参数,可以将它设置为NULL
6.2 演示示例
1 | #include <stdio.h> |
在上面的示例中,
- 首先我们使用
time()
函数来获取当前时间的秒数; - 然后使用
ctime()
函数将其转换为可读的日期和时间格式; - 最后,再用将日期和时间字符串输出到标准输出流中。
6.3 运行结果
7. tmpfile
7.1 函数说明
函数声明 | 函数功能 |
---|---|
FILE *tmpfile(void); |
可以用于在临时目录中创建一个唯一的临时文件,并返回文件指针 |
7.2 演示示例
1 | #include <stdio.h> |
在上述的示例中,
- 首先我们使用
tmpfile()
函数创建一个临时文件; - 接着使用
fputs()
函数将字符串"这是一个临时文件"
写入该文件; - 然后,我们使用
rewind()
函数将文件指针移动到文件开始处; - 再接着,使用
fgets()
函数从临时文件中读取数据并将其存储到字符串数组str
中; - 最后,我们输出从临时文件中读取的数据,并关闭临时文件。
注意: 使用 tmpfile()
创建的临时文件只在程序运行期间存在,并在程序终止时自动删除。如果需要在程序运行期间保留临时文件,请使用 tmpnam()
或 mkstemp()
等函数来创建文件。
7.3 运行结果
8. tmpnam
8.1 函数说明
函数声明 | 函数功能 |
---|---|
char *tmpnam(char *s); |
用于创建一个唯一的临时文件名 |
参数:
- s : 一个指向字符数组的指针,用于存储临时文件名。如果
s
等于NULL
,则函数会返回指向静态内存区的指针,该内存区包含了唯一的临时文件名
8.2 演示示例
1 | #include <stdio.h> |
在上面的示例中,
- 我们首先使用
tmpnam()
函数创建一个唯一的临时文件名; - 然后将其存储到字符数组
tmpname
中; - 最后,我们输出该临时文件名。
注意: 使用 tmpnam()
创建的临时文件名只在程序运行期间存在,不具有真正唯一性,因此可能存在一定程度的风险。如果需要创建一个具有真正唯一性的临时文件,请考虑使用 mkstemp()
或类似的函数。
8.3 运行结果
9. toascii
9.1 函数说明
函数声明 | 函数功能 |
---|---|
int toascii(int c); |
将一个字符转换为其对应的 ASCII 码值 |
参数:
- c : 要转换的字符
9.2 演示示例
1 | #include <stdio.h> |
注意 : toascii()
函数已经过时,不建议在新代码中使用。在 C99
标准中,改用更安全的 isascii()
函数来检查字符是否为 7-bit ASCII
字符,并使用位掩码操作或其他算法来将非 ASCII
字符转换为相应的 7-bit ASCII
码值。
知识点: 7-bit ASCII
,也称为美国信息交换标准代码 (American Standard Code for Information Interchange
),是一种基于英语的字符编码系统,使用 7
个二进制位(即一个字节)表示每个字符。它涵盖了拉丁字母、数字、标点符号和一些特殊符号,共计 128
个字符。
9.3 运行结果
10. tolower
10.1 函数说明
函数声明 | 函数功能 |
---|---|
int tolower(int c); |
可以用于将一个 ASCII 字符转换为小写字母 |
参数:
- c : 要转换的字符
10.2 演示示例
1 | #include <stdio.h> |
10.3 运行结果
11. toupper
11.1 函数说明
函数声明 | 函数功能 |
---|---|
int toupper(int c); |
可以用于将一个 ASCII 字符转换为大写字母 |
参数:
- c : 要转换的字符
11.2 演示示例
1 | #include <stdio.h> |
11.3 运行结果
12. trunc,truncf,truncl
12.1 函数说明
函数声明 | 函数功能 |
---|---|
double trunc(double x); |
截取 x 的小数部分,并返回整数部分(double) |
float truncf(float x); |
截取 x 的小数部分,并返回整数部分(float) |
long double truncl(long double x); |
截取 x 的小数部分,并返回整数部分(long double) |
12.2 演示示例
1 | #include <stdio.h> |
12.3 运行结果
13. tzset
13.1 函数说明
函数声明 | 函数功能 |
---|---|
void tzset(void); |
可以用于设置时区信息 |
13.2 演示示例
UNIX/Linux 下示例:
1 | #include <stdio.h> |
windows 下示例:
1 | #include <stdio.h> |
在上述示例代码中,
- 首先定义变量
rawtime
和timeinfo
,分别用于存储当前时间和时间结构体。 - 接着使用
GetTimeZoneInformation()
函数获取当前系统时区信息,并将其存储在tzinfo
变量中。 - 然后使用
WideCharToMultiByte()
函数将tzinfo.StandardName
转换为UTF-8
编码的字符串,并将其存储在standard_name
变量中。 - 再接着使用
putenv_s()
函数将standard_name
设置为环境变量TZ
的值,并使用 tzset 函数更新本地时区信息。 - 再然后使用
localtime()
函数将rawtime
转换为时间结构体timeinfo
。 - 之后使用
asctime()
函数将时间结构体timeinfo
转换为字符串格式,并输出到标准输出流中。 - 最后释放
standard_name
分配的内存空间,并正常结束程序。
13.3 运行结果
14. tgamma,tgammaf,tgammal
14.1 函数说明
函数声明 | 函数功能 |
---|---|
double tgamma(double x); |
用于计算 Gamma 函数(double) |
float tgammaf(float x); |
用于计算 Gamma 函数(float) |
long double tgammal(long double x); |
用于计算 Gamma 函数(long double) |
14.2 演示示例
1 | #include <stdio.h> |
知识点: 伽玛函数(Gamma
函数),也叫欧拉第二积分,是阶乘函数在实数与复数上扩展的一类函数。
14.3 运行结果
参考
C语言函数大全--s 开头的函数(4)
总览
函数声明 | 函数功能 |
---|---|
char * strdup(const char *s); |
用于将一个以 NULL 结尾的字符串复制到新分配的内存空间中 |
int stricmp(const char *s1, const char *s2); |
用于比较两个字符串的字母序是否相等,忽略大小写 |
char *strerror(int errnum); |
用于将指定的错误码转换为相应的错误信息 |
int strcmpi(const char *s1, const char *s2); |
用于比较两个字符串的字母序是否相等,忽略大小写 |
int strncmp(const char *s1, const char *s2, size_t n); |
用于比较两个字符串的前n个字符是否相等 |
int strncmpi(const char *s1, const char *s2, size_t n); |
用于比较两个字符串的前n个字符是否相等,忽略大小写 |
char *strncpy(char *dest, const char *src, size_t n); |
用于将一个字符串的一部分拷贝到另一个字符串中 |
int strnicmp(const char *s1, const char *s2, size_t n); |
用于比较两个字符串的前n个字符是否相等,忽略大小写 |
char *strnset(char *str, int c, size_t n); |
用于将一个字符串的前n个字符都设置为指定的字符 |
char *strpbrk(const char *str1, const char *str2); |
用于在一个字符串中查找任意给定字符集合中的字符的第一次出现位置 |
char *strrchr(const char *str, int character); |
在给定的字符串中查找指定字符的最后一个匹配项 |
char *strrev(char *str); |
将给定字符串中的所有字符顺序颠倒,并返回颠倒后的字符串 |
char *strset(char *str, int character); |
用于设置给定字符串中的所有字符为指定的值,并返回修改后的字符串 |
size_t strspn(const char *str1, const char *str2); |
计算字符串 str1 中包含在字符串 str2 中的前缀子字符串长度,并返回该长度值 |
char *strstr(const char *str1, const char *str2); |
在字符串 str1 中查找第一个出现的字符串 str2,如果找到了,则返回指向该位置的指针;否则,返回 NULL |
double strtod(const char *str, char **endptr); |
将字符串 str 转换为一个浮点数(double 类型),并返回该浮点数。如果发生了转换错误,则返回 0.0,并且可以通过 endptr 指针返回指向第一个无法转换的字符的指针。 |
char *strtok(char *str, const char *delim); |
用于将一个字符串分割成多个子字符串 |
long int strtol(const char *str, char **endptr, int base); |
将字符串 str 转换为一个长整型数(long int 类型) |
char *strupr(char *str); |
将字符串 str 中的所有小写字母转换为大写字母,并返回指向该字符串的指针 |
void swab(const void *src, void *dest, ssize_t nbytes); |
将源缓冲区中的每两个相邻字节进行互换,然后将结果存储到目标缓冲区中 |
int system(const char *command); |
执行一个 shell 或 cmd 命令,并等待命令的完成 |
1. strdup
1.1 函数说明
函数声明 | 函数功能 |
---|---|
char * strdup(const char *s); |
用于将一个以 NULL 结尾的字符串复制到新分配的内存空间中 |
注意: strdup()
函数返回指向新分配的内存空间的指针,如果空间不足则返回 NULL
。调用者负责释放返回的指针所指向的内存空间。 strdup()
函数与strcpy()
函数类似,但是它会动态地分配内存空间,而 strcpy()
需要调用者提供足够大的目标缓冲区。
1.2 演示示例
1 | #include <stdio.h> |
1.3 运行结果
2. stricmp
2.1 函数说明
函数声明 | 函数功能 |
---|---|
int stricmp(const char *s1, const char *s2); |
用于比较两个字符串的字母序是否相等,忽略大小写 |
返回值:
- 如果
s1
和s2
代表的字符串相等(忽略大小写),则返回0
; - 如果
s1
比s2
小,则返回负数; - 如果
s1
比s2
大,则返回正数。
2.2 演示示例
1 | #include <stdio.h> |
2.3 运行结果
3. strerror
3.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strerror(int errnum); |
用于将指定的错误码转换为相应的错误信息 |
参数:
- errnum : 要转换为错误信息的错误码,通常是由系统调用或库函数返回的错误码。
返回值:
指向错误信息字符串的指针,该字符串描述了与错误码相关的错误
3.2 演示示例
1 | #include <stdio.h> |
3.3 运行结果
4. strcmpi
4.1 函数说明
函数声明 | 函数功能 |
---|---|
int strcmpi(const char *s1, const char *s2); |
用于比较两个字符串的字母序是否相等,忽略大小写 |
返回值:
- 如果
s1
和s2
代表的字符串相等(忽略大小写),则返回0
; - 如果
s1
比s2
小,则返回负数; - 如果
s1
比s2
大,则返回正数。
4.2 演示示例
1 | #include <stdio.h> |
看到这里,可能会疑惑 上面不是已经有了 忽略大小写的字符串比较了嘛?
那 strcmpi
和 stricmp
有什么区别呢?
虽然它们的实现功能相同,但是不同的编译器或操作系统可能会提供其中一个或两个函数。在具备这两个函数的系统中,strcmpi
常常作为 VC(Visual C++)
和 Borland C++
的扩展库函数,而 stricmp
则是 POSIX
标准中定义的函数,在许多 类UNIX系统 上可用。因此,如果需要编写可移植的代码,则应该使用 stricmp
函数,而不是 strcmpi
函数。
4.3 运行结果
5. strncmp
5.1 函数说明
函数声明 | 函数功能 |
---|---|
int strncmp(const char *s1, const char *s2, size_t n); |
用于比较两个字符串的前n个字符是否相等 |
参数:
- s1 : 待比较的第一个字符串
- s2 : 待比较的第二个字符串
- n : 要比较的字符数
返回值:
- 如果
s1
和s2
代表的字符串相等(忽略大小写),则返回0
; - 如果
s1
比s2
小,则返回负数; - 如果
s1
比s2
大,则返回正数。
5.2 演示示例
1 | #include <stdio.h> |
5.3 运行结果
6. strncmpi
6.1 函数说明
函数声明 | 函数功能 |
---|---|
int strncmpi(const char *s1, const char *s2, size_t n); |
用于比较两个字符串的前n个字符是否相等,忽略大小写 |
参数:
- s1 : 待比较的第一个字符串
- s2 : 待比较的第二个字符串
- n : 要比较的字符数
返回值:
- 如果
s1
和s2
代表的字符串相等(忽略大小写),则返回0
; - 如果
s1
比s2
小,则返回负数; - 如果
s1
比s2
大,则返回正数。
6.2 演示示例
1 | #include <stdio.h> |
注意: strncmpi
函数不是 C
语言标准库中的函数,但在某些编译器或操作系统中可能会提供。
7. strncpy
7.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strncpy(char *dest, const char *src, size_t n); |
用于将一个字符串的一部分拷贝到另一个字符串中 |
参数:
- dest : 目标字符串
- src : 源字符串
- n : 要拷贝的字符数
7.2 演示示例
1 | #include <stdio.h> |
当源字符串长度小于 n
时,strncpy()
函数将在目标字符串的末尾填充 \0
字符以达到指定的拷贝长度 n
1 | #include <stdio.h> |
如果源字符串长度大于等于 n
个字符,strncpy()
函数将会拷贝源字符串的前 n
个字符到目标字符串中,并且不会自动添加末尾的 \0
字符。这种情况下,目标字符串可能不是以 \0
字符结尾,因此需要手动在拷贝后的目标字符串中添加 \0
字符。
7.3 运行结果
8. strnicmp
8.1 函数说明
函数声明 | 函数功能 |
---|---|
int strnicmp(const char *s1, const char *s2, size_t n); |
用于比较两个字符串的前n个字符是否相等,忽略大小写 |
参数:
- s1 : 待比较的第一个字符串
- s2 : 待比较的第二个字符串
- n : 要比较的字符数
返回值:
- 如果
s1
和s2
代表的字符串相等(忽略大小写),则返回0
; - 如果
s1
比s2
小,则返回负数; - 如果
s1
比s2
大,则返回正数。
8.2 演示示例
1 | #include <stdio.h> |
8.3 运行结果
9. strnset
9.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strnset(char *str, int c, size_t n); |
用于将一个字符串的前n个字符都设置为指定的字符 |
参数:
- str: 要进行操作的字符串
- c: 要设置的字符
- n : 要设置的字符数
9.2 演示示例
1 | #include <stdio.h> |
注意: strnset()
函数是非标准函数,并不是所有的编译器和操作系统都支持该函数。如果需要跨平台兼容,请使用标准库函数 memset()
来实现类似的功能
1 | #include <stdio.h> |
上述示例使用了标准库函数 memset
来将 str
的前 5
个字符都设置为 *
9.3 运行结果
10. strpbrk
10.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strpbrk(const char *str1, const char *str2); |
用于在一个字符串中查找任意给定字符集合中的字符的第一次出现位置 |
参数:
- str1 : 要进行搜索的字符串
- str2 : 要查找的字符集合
注意: 如果在str1
中没有找到str2
中的任何字符,则 strpbrk
函数返回NULL
指针
10.2 演示示例
1 | #include <stdio.h> |
10.3 运行结果
11. strrchr
11.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strrchr(const char *str, int character); |
在给定的字符串中查找指定字符的最后一个匹配项 |
参数:
- str : 要进行搜索的字符串
- character : 要查找的字符,其 ASCII 值由整数表示
返回值:
- 如果匹配到,返回匹配字符的地址;
- 如果没有找到匹配项,则返回 NULL。
11.2 演示示例
1 | #include <stdio.h> |
11.3 运行结果
12. strrev
12.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strrev(char *str); |
将给定字符串中的所有字符顺序颠倒,并返回颠倒后的字符串 |
参数:
- str : 要反转的的字符串
注意:因为 strrev()
函数是一个非标准的库函数,许多编译器可能并不支持该函数,所以在使用该函数之前,请确保你的编译器支持它。
12.2 演示示例
1 | #include <stdio.h> |
12.3 运行结果
13. strset
13.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strset(char *str, int character); |
用于设置给定字符串中的所有字符为指定的值,并返回修改后的字符串 |
参数:
- str : 要修改的字符串
- character : 要设置的字符,其 ASCII 值由整数表示
13.2 演示示例
1 | #include <stdio.h> |
13.3 运行结果
14. strspn
14.1 函数说明
函数声明 | 函数功能 |
---|---|
size_t strspn(const char *str1, const char *str2); |
计算字符串 str1 中包含在字符串 str2 中的前缀子字符串长度,并返回该长度值 |
参数:
- str1 : 要搜索的字符串
- str2 : 包含要搜索的字符集合的 字符串
14.2 演示示例
1 | #include <stdio.h> |
上述示例代码运行后,如果出现 error: 'strndup' was not declared in this scope
,说明当前的编译器不支持 strndup()
函数。
因为 strndup()
函数是 C11
新增的函数,因此可能不是所有编译器都支持。
那我们就用如下的方式来替换一下 :
1 | #include <stdio.h> |
14.3 运行结果
15. strstr
15.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strstr(const char *str1, const char *str2); |
在字符串 str1 中查找第一个出现的字符串 str2,如果找到了,则返回指向该位置的指针;否则,返回 NULL |
参数:
- str1 : 源字符串
- str2 : 要查找的子字符串
15.2 演示示例
1 | #include <stdio.h> |
15.3 运行结果
16. strtod
16.1 函数说明
函数声明 | 函数功能 |
---|---|
double strtod(const char *str, char **endptr); |
将字符串 str 转换为一个浮点数(double 类型),并返回该浮点数。如果发生了转换错误,则返回 0.0,并且可以通过 endptr 指针返回指向第一个无法转换的字符的指针。 |
参数: |
- str : 要转换为浮点数的字符串
- endptr : 可选参数,用于存储第一个无法转换的字符的指针地址
16.2 演示示例
1 | #include <stdio.h> |
16.3 运行结果
17. strtok
17.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strtok(char *str, const char *delim); |
用于将一个字符串分割成多个子字符串 |
参数:
- str : 要被分割的 字符串。第一次调用时,应该将其设置为要被分割的字符串的地址;以后的调用中,该参数应该为 NULL
- delim: 分隔符字符集合,用于指定子字符串的分割标准
返回值: 分割后的第一个子字符串,并在每次调用时修改传入的原始字符串 str,使其指向下一个要被分割的子字符串
17.2 演示示例
1 | #include <stdio.h> |
在上述的示例中,
- 我们首先定义了字符串
str
和 字符集合delim
; - 然后使用
strtok()
函数将字符串str
按照字符集合delim
中的分隔符进行分割。每次调用strtok()
函数时,它会返回分割出的第一个子字符串,并且会修改str
指向下一个将要被分割的子字符串。 - 最后我们不断循环调用
strtok()
函数,并输出返回的每个子字符串,直到没有更多的子字符串可以分割为止
17.3 运行结果
18. strtol
18.1 函数说明
函数声明 | 函数功能 |
---|---|
long int strtol(const char *str, char **endptr, int base); |
将字符串 str 转换为一个长整型数(long int 类型) |
参数:
- str : 要被转换为长整型数的字符串
- endptr : 可选参数,用于存储第一个无法转换的字符的指针地址
- base: 转换的进制数,必须是
2
到36
之间的有效数字或者0
。为0
表示采用默认的进制数,即可以解释成合法的整数的最大进制数(一般是10
)
返回值:
- 如果成功转换,返回一个长整型数;
- 如果发生了转换错误,则返回
0
,并且可以通过endptr
指针返回指向第一个无法转换的字符的指针。
18.2 演示示例
1 | #include <stdio.h> |
18.3 运行结果
19. strupr
19.1 函数说明
函数声明 | 函数功能 |
---|---|
char *strupr(char *str); |
将字符串 str 中的所有小写字母转换为大写字母,并返回指向该字符串的指针 |
参数:
- str : 要进行大小写转换的字符串
19.2 演示示例
1 | #include <stdio.h> |
19.3 运行结果
20. swab
20.1 函数说明
函数声明 | 函数功能 |
---|---|
void swab(const void *src, void *dest, ssize_t nbytes); |
将源缓冲区中的每两个相邻字节进行互换,然后将结果存储到目标缓冲区中 |
参数:
- str : 源缓冲区的指针
- dest : 目标缓冲区的指针
- nbytes : 需要交换的字节数
20.2 演示示例
1 | #include <stdio.h> |
上面示例中,我在一开始演示时,因为没有加上 #include <unistd.h>
这个头文件,导致出现如下错误:
20.3 运行结果
21. system
21.1 函数说明
函数声明 | 函数功能 |
---|---|
int system(const char *command); |
执行一个 shell 或 cmd 命令,并等待命令的完成 |
参数:
- command : 要执行的
shell
或cmd
命令。
21.2 演示示例
下面演示 执行 ls -l
的 shell
命令,笔者是在 windows
环境下运行,故会出错,详见运行结果那里
1 | #include <stdio.h> |
再来看下,演示使用 dir
命令,在 windows
下可以输出当前目录下的所有文件和子目录
1 | #include <stdlib.h> |
21.3 运行结果
C语言函数大全--s 开头的函数(3)
总览
函数声明 | 函数功能 |
---|---|
unsigned int sleep(unsigned int seconds); |
它是 C 语言标准库中的函数,用于使当前进程挂起一定的时间。在挂起期间,操作系统会将该进程从调度队列中移除,直到指定的时间过去为止。 |
void Sleep(DWORD milliseconds); |
它是 Windows API 中的一部分,与 sleep 函数类似,它可以使当前线程挂起一段时间。 |
int sopen(const char* filename, int access, int sharemode, int shflag, ...); |
它是 Microsoft Visual C++ 中的一个函数,用于打开文件并返回文件句柄。与标准库中的 fopen 函数不同,sopen 函数支持以二进制方式打开文件,并且可以指定文件读写方式、共享模式和文件访问权限等参数。 |
void sound(int frequency); |
用于发出声音,sound 函数会持续发出声音,直到调用 nosound 函数停止 |
int spawnl(int mode, const char *cmdname, const char *arg0, ..., NULL); |
它是在 Windows 平台上使用的函数,用于启动另一个程序,并等待该程序运行结束后再继续执行本程序 |
int spawnle(int mode, const char *cmdname, const char *arg0, ..., const char *envp[]); |
它是在 Windows 平台上使用的函数,可以启动另一个程序,并通过指定的环境变量传递参数 |
int sprintf(char *str, const char *format, ...); |
用于将格式化的字符串输出到指定的缓冲区中 |
int snprintf(char *str, size_t size, const char *format, ...); |
用于将格式化的字符串输出到指定的缓冲区中,类似于 sprintf 函数,但它可以限制输出字符串的长度,避免缓冲区溢出 |
double sqrt(double x); |
计算 x 的平方根(double) |
float sqrtf(float x); |
计算 x 的平方根 (float) |
long double sqrtl(long double x); |
计算 x 的平方根 (long double) |
void srand(unsigned int seed); |
用于初始化伪随机数生成器 |
int sscanf(const char *str, const char *format, ...); |
用于从字符串中读取数据并进行格式化转换 |
int stat(const char *path, struct stat *buf); |
用于获取文件或目录的属性信息,例如文件大小、创建时间、修改时间等。这些属性信息都被保存在一个名为 struct stat 的结构体中。 |
int stime(const time_t *t); |
它是是 Unix/Linux 系统中的一个系统调用函数,用于设置系统时间 |
char *stpcpy(char *dest, const char *src); |
用于复制一个字符串到另一个字符串缓冲区,并返回目标字符串的结尾指针 |
char* strcat(char* dest, const char* src); |
用于将一个字符串拼接到另一个字符串的末尾 |
char* strchr(const char* str, int c); |
用于查找字符串中第一次出现指定字符的位置,并返回该位置的指针 |
int strcmp(const char* str1, const char* str2); |
用于比较两个字符串是否相等 |
char* strcpy(char* dest, const char* src); |
用于将一个字符串复制到另一个字符串缓冲区中 |
size_t strcspn(const char* str, const char* charset); |
用于查找字符串中第一次出现指定字符集合中任何字符的位置,并返回该位置的索引 |
1. sleep
1.1 函数说明
函数声明 | 函数功能 |
---|---|
unsigned int sleep(unsigned int seconds); |
它是 C 语言标准库中的函数,用于使当前进程挂起一定的时间。在挂起期间,操作系统会将该进程从调度队列中移除,直到指定的时间过去为止。 |
void Sleep(DWORD milliseconds); |
它是 Windows API 中的一部分,与 sleep 函数类似,它可以使当前线程挂起一段时间。 |
sleep 函数参数:
- seconds : 要挂起的时间,单位为秒
Sleep 函数参数:
- milliseconds: 要挂起的时间,单位为毫秒
1.2 演示示例
1 | #include <stdio.h> |
在使用 sleep()
函数时,将会使当前线程或者进程暂停指定的时间,以便给其他进程或线程执行机会,同时也可以用来控制程序的运行速度。
虽然 sleep()
函数很简单,但是需要注意以下几点:
sleep()
的精度并不高,它所挂起的时间可能会略微超过要求的时间。sleep()
函数是阻塞式的,即在调用sleep()
函数期间,该进程不能进行任何其他操作,包括响应信号等。- 在使用
sleep()
函数期间,如果发生信号,那么sleep()
函数将被中断,该进程将继续运行。
1 | #include <stdio.h> |
由于 Sleep()
函数是阻塞式的,因此该函数调用期间,当前线程将被阻塞。在函数调用结束后,该线程将恢复运行。
在 Windows
系统下使用 Sleep()
函数时,需要注意以下几点:
Sleep()
函数以毫秒为单位指定时间,精度比sleep()
函数更高。- 在调用
Sleep()
函数期间,当前线程将被阻塞,不能进行任何其他操作,包括响应信号等。 - 在使用
Sleep()
函数期间,如果发生信号,那么Sleep()
函数将被中断,该线程将继续运行。
1.3 运行结果
2. sopen
2.1 函数说明
函数声明 | 函数功能 |
---|---|
int sopen(const char* filename, int access, int sharemode, int shflag, ...); |
它是 Microsoft Visual C++ 中的一个函数,用于打开文件并返回文件句柄。与标准库中的 fopen 函数不同,sopen 函数支持以二进制方式打开文件,并且可以指定文件读写方式、共享模式和文件访问权限等参数。 |
参数:
- filename : 要打开的文件名
- access : 指定文件的访问方式,可以是以下值之一:
_O_RDONLY
:只读方式打开文件_O_WRONLY
:只写方式打开文件_O_RDWR
:读写方式打开文件_O_APPEND
:在文件末尾追加数据_O_CREAT
:如果文件不存在,则创建文件_O_TRUNC
:如果文件已存在,清空文件内容_O_EXCL
:与_O_CREAT
配合使用,如果文件已经存在则打开失败
- sharemode : 指定文件共享模式,可以是以下值之一:
_SH_DENYRW
:独占方式打开文件,其他进程不能读取或写入该文件_SH_DENYWR
:共享读取方式打开文件,其他进程不能写入该文件_SH_DENYRD
:共享写入方式打开文件,其他进程不能读取该文件_SH_DENYNO
:共享方式打开文件,其他进程可以读取和写入该文件
- shflag : 指定文件属性标志,可以是以下值之一:
_S_IWRITE
:文件可写_S_IREAD
:文件可读
- … : 可选参数。如果指定了
_O_CREAT
参数,则需要指定文件的访问权限
2.2 演示示例
1 | #include <stdio.h> |
指定文件共享模式,如果没有对应的宏常量,则可以定义如下:
1 | #define _SH_DENYRW 0x10 |
2.3 运行结果
3. sound
3.1 函数说明
函数声明 | 函数功能 |
---|---|
void sound(int frequency); |
用于发出声音 |
void nosound(void); |
sound 函数会持续发出声音,直到调用 nosound 函数停止 |
参数:
- frequency : 要发出的声音的频率,单位为赫兹(Hz)
3.2 演示示例
1 | #include <stdio.h> |
Windows 下如果上述出现 error: 'sound' was not declared in this scope
,可以使用如下:
1 | #include <stdio.h> |
注意: 在 Windows
平台上建议使用 Beep()
函数代替 sound()
函数,因为 Beep()
函数不需要特殊的硬件支持,并且可移植性更好。
4. spawnl
4.1 函数说明
函数声明 | 函数功能 |
---|---|
int spawnl(int mode, const char *cmdname, const char *arg0, ..., NULL); |
它是在 Windows 平台上使用的函数,用于启动另一个程序,并等待该程序运行结束后再继续执行本程序 |
参数:
- mode : 执行模式,可以为
P_WAIT
或P_NOWAIT
- cmdname : 要执行的程序名称
- arg0: 要传递给程序的命令行参数,以
NULL
结尾
4.2 演示示例
4.2.1 test.c
1 | #include <stdio.h> |
4.2.2 spawnl 演示
1 | #include <process.h> |
如果在使用 spawnl()
函数时遇到了 "Error from spawnl: Invalid argument"
错误,有可能是由于参数传递不正确或要执行的程序不存在等原因导致的。
以下是一些可能导致该错误的情况:
- 要执行的程序不存在或路径不正确。
cmdname
参数包含非法字符或格式不正确。- 参数列表没有以
NULL
结尾。 - 要执行的程序需要管理员权限,但当前用户没有足够的权限。
4.3 运行结果
5. spawnle
5.1 函数说明
函数声明 | 函数功能 |
---|---|
int spawnle(int mode, const char *cmdname, const char *arg0, ..., const char *envp[]); |
它是在 Windows 平台上使用的函数,可以启动另一个程序,并通过指定的环境变量传递参数 |
参数:
- mode : 执行模式,可以为
P_WAIT
或P_NOWAIT
- cmdname : 要执行的程序名称
- arg0 : 要传递给程序的命令行参数,以
NULL
结尾 - envp : 要传递给程序的环境变量
5.2 演示示例
5.2.1 SubEnvTest.c
1 | #include <process.h> |
5.2.2 spawnle 演示
1 | #include <stdio.h> |
5.3 运行结果
6. sprintf
6.1 函数说明
函数声明 | 函数功能 |
---|---|
int sprintf(char *str, const char *format, ...); |
用于将格式化的字符串输出到指定的缓冲区中 |
参数:
- str : 指向字符数组(缓冲区)的指针,用于存储生成的格式化字符串
- format : 用于指定要生成的格式化文本
- … : 用于填充格式化字符串中的占位符
6.2 演示示例
1 | #include <stdio.h> |
6.3 运行结果
7. snprintf
7.1 函数说明
函数声明 | 函数功能 |
---|---|
int snprintf(char *str, size_t size, const char *format, ...); |
用于将格式化的字符串输出到指定的缓冲区中,类似于 sprintf 函数,但它可以限制输出字符串的长度,避免缓冲区溢出 |
参数:
- str : 指向字符数组(缓冲区)的指针,用于存储生成的格式化字符串
- size : 指定缓冲区可写入的最大字节数
- format : 用于指定要生成的格式化文本
- … : 用于填充格式化字符串中的占位符
7.2 演示示例
1 | #include <stdio.h> |
7.3 运行结果
8. sqrt,sqrtf,sqrtl
8.1 函数说明
函数声明 | 函数功能 |
---|---|
double sqrt(double x); |
计算 x 的平方根(double) |
float sqrtf(float x); |
计算 x 的平方根 (float) |
long double sqrtl(long double x); |
计算 x 的平方根 (long double) |
参数:
- x : 要计算平方根的数
8.2 演示示例
1 | #include <stdio.h> |
8.3 运行结果
9. srand
9.1 函数说明
函数声明 | 函数功能 |
---|---|
void srand(unsigned int seed); |
用于初始化伪随机数生成器 |
参数:
- seed : 用于设置伪随机数生成器的种子值。不同的种子值会产生不同的随机数序列。
9.2 演示示例
1 | #include <stdio.h> |
注意: 如果不设置种子值,则每次程序运行时都会得到相同的随机数序列。因此,我们在实际开发中,常常使用时间戳或其他随机值来作为种子值,以确保生成的随机数具有更好的随机性。
9.3 运行结果
10. sscanf
10.1 函数说明
函数声明 | 函数功能 |
---|---|
int sscanf(const char *str, const char *format, ...); |
用于从字符串中读取数据并进行格式化转换 |
参数:
- str : 要读取数据的字符串
- format : 格式字符串,用于指定要读取的数据的类型、数量和顺序
- … : 指向要写入的变量的指针
10.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,我们使用 sscanf()
函数从字符串 "hello world 123"
中读取一个字符串和一个整数,并输出到控制台。
注意: 在格式字符串中,%s
表示读取一个字符串,%d
表示读取一个整数。另外,%*s
表示读取并忽略一个字符串。
10.3 运行结果
11. stat
11.1 函数说明
函数声明 | 函数功能 |
---|---|
int stat(const char *path, struct stat *buf); |
用于获取文件或目录的属性信息,例如文件大小、创建时间、修改时间等。这些属性信息都被保存在一个名为 struct stat 的结构体中。 |
参数:
- path : 要获取属性信息的文件或目录路径
- buf : 指向
struct stat
结构体的指针,用于存储获取到的属性信息
返回值:
- 如果执行成功,则返回
0
; - 否则返回
-1
并设置相应的错误码(存储在errno
变量中)
11.2 演示示例
1 | #include <stdio.h> |
11.3 运行结果
12. stime
12.1 函数说明
函数声明 | 函数功能 |
---|---|
int stime(const time_t *t); |
它是是 Unix/Linux 系统中的一个系统调用函数,用于设置系统时间 |
参数:
- t: 指向一个 time_t 类型变量的指针,表示要设置的系统时间
返回值:
- 如果执行成功,则返回
0
; - 否则返回
-1
并设置相应的错误码(存储在errno
变量中)
12.2 演示示例
1 | #include <stdio.h> |
在如上的示例代码中,
- 我们首先使用
time()
函数获取当前时间,并输出到控制台; - 然后,我们设置系统时间为
2022 年 1 月 1 日
,并等待一秒钟以确保时间设置完成。 - 最后,我们再次输出当前时间,以验证时间设置是否成功。
注意: stime()
函数只能在 Linux/Unix
系统上使用,并且需要 root
权限才能调用。另外,在修改系统时间时应谨慎行事,以避免对系统和应用程序造成不可预料的影响。
13. stpcpy
13.1 函数说明
函数声明 | 函数功能 |
---|---|
char *stpcpy(char *dest, const char *src); |
用于复制一个字符串到另一个字符串缓冲区,并返回目标字符串的结尾指针 |
参数:
- dest : 目标字符串的缓冲区,必须具有足够的空间来存储源字符串
- src : 要复制的源字符串。
返回值: 一个指向目标字符串结尾的指针
13.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,我们使用 stpcpy()
函数将源字符串 "Hello world"
复制到目标字符串 dest
中,并输出两个字符串以及目标字符串的结尾指针。
注意: stpcpy()
函数只能在支持 ISO C99
或 POSIX.1-2001
标准的系统上使用,对于其他系统,可能需要使用 strcpy()
函数代替。此外,应始终确保目标字符串缓冲区具有足够的空间来存储源字符串,以避免发生缓冲区溢出。
14. strcat
14.1 函数说明
函数声明 | 函数功能 |
---|---|
char* strcat(char* dest, const char* src); |
用于将一个字符串拼接到另一个字符串的末尾 |
参数:
- dest : 目标字符串的缓冲区,必须具有足够的空间来存储源字符串
- src : 要拼接的源字符串
返回值: 一个指向目标字符串结尾的指针
14.2 演示示例
1 | #include <stdio.h> |
14.3 运行结果
15. strchr
15.1 函数说明
函数声明 | 函数功能 |
---|---|
char* strchr(const char* str, int c); |
用于查找字符串中第一次出现指定字符的位置,并返回该位置的指针 |
参数:
- src : 要查找的字符串
- c: 要查找的字符,是一个整数值
15.2 演示示例
1 | #include <stdio.h> |
注意: strchr()
函数只能查找单个字符,如果要查找一个子字符串,应使用 strstr()
函数代替。另外,在查找字符时,需要将字符转换为整数值传递给 strchr()
函数,以避免发生类型错误。
15.3 运行结果
16. strcmp
16.1 函数说明
函数声明 | 函数功能 |
---|---|
int strcmp(const char* str1, const char* str2); |
用于比较两个字符串是否相等 |
参数:
- str1 : 要比较的第一个字符串
- str2 : 要比较的第二个字符串
返回值: 一个整数,表示两个字符串之间的大小关系
- 如果
str1
小于str2
,则返回负整数; - 如果
str1
大于str2
,则返回正整数; - 如果
str1
等于str2
,则返回 0。
16.2 演示示例
1 | #include <stdio.h> |
16.3 运行结果
17. strcpy
17.1 函数说明
函数声明 | 函数功能 |
---|---|
char* strcpy(char* dest, const char* src); |
用于将一个字符串复制到另一个字符串缓冲区中 |
参数:
- dest : 目标字符串的缓冲区,必须具有足够的空间来存储源字符串
- src : 要复制的源字符串
返回值: 一个指向目标字符串结尾的指针
17.2 演示示例
1 | #include <stdio.h> |
注意: strcpy()
函数只能用于复制以 \0
结尾的字符串,否则可能导致未定义的行为或内存损坏。在调用 strcpy()
函数之前,应确保目标字符串缓冲区具有足够的空间来容纳源字符串,以避免发生缓冲区溢出。
17.3 运行结果
18. strcspn
18.1 函数说明
函数声明 | 函数功能 |
---|---|
size_t strcspn(const char* str, const char* charset); |
用于查找字符串中第一次出现指定字符集合中任何字符的位置,并返回该位置的索引 |
参数:
- src : 要查找的字符串
- charset : 要查找的字符集合
18.2 演示示例
1 | #include <stdio.h> |
在上述的示例代码中,我们使用 strcspn()
函数在字符串 "Hello world"
中查找字符集合 "owd"
中的任何字符,并输出找到的字符及其在字符串中的位置索引。
18.3 运行结果
C语言函数大全--s 开头的函数(2)
总览
函数声明 | 函数功能 |
---|---|
void setlinestyle( int linestyle, unsigned upattern, int thickness ); |
设置当前绘图窗口的线条样式、线型模式和线条宽度 |
void *setmem(void *dest, size_t n, int c); |
用于将指定内存区域的每个字节都设置为指定的值 |
int setmode(int fd, int mode); |
它是 Windows 系统下的特定库函数,用于将指定文件的 I/O 模式设置为文本模式或二进制模式 |
void setpalette(int colornum, int color); |
设置调色板的颜色 |
void setrgbpalette(int colornum, int red, int green, int blue); |
用于设置当前绘图窗口的调色板中某个颜色的 RGB 值 |
void settextjustify(int horiz, int vert); |
用于设置文本输出的对齐方式 |
void settextstyle(int font, int direction, int charsize); |
用于设置当前文本输出的字体、方向和大小 |
void settime(struct time *timep); |
设置当前系统时间 |
void setusercharsize(int multx, int dirx, int multy, int diry); |
用于设置用户定义的字符大小 |
int setvbuf(FILE *stream, char *buf, int type, unsigned size); |
用于设置文件流的缓冲方式 |
void setviewport(int left, int top, int right, int bottom, int clipflag); |
用于设置绘图窗口的视口范围 |
void setvisualpage(int pagenum); |
用于设置图形窗口中用户可见的页面 |
void setwritemode(int mode); |
用于设置绘画操作的写入模式 |
void (*signal(int signum, void (*handler)(int)))(int); |
用于设置指定信号的处理方式。当系统接收到某个信号时,会调用相应的信号处理函数来处理该信号。在调用 signal 函数时,需要指定要处理的信号以及相应的信号处理函数。 |
double sin(double x); |
用于计算一个角度(以弧度为单位)的正弦值(double) |
float sinf(float x); |
用于计算一个角度(以弧度为单位)的正弦值(float) |
long double sinl(long double x); |
用于计算一个角度(以弧度为单位)的正弦值(long double) |
void sincos(double x, double* sinVal, double* cosVal); |
用于同时计算一个角度(以弧度为单位)的正弦值和余弦值 |
void sincosf(float x, float* sinVal, float* cosVal); |
用于同时计算一个角度(以弧度为单位)的正弦值和余弦值 |
void sincosl(long double x, long double* sinVal, long double* cosVal); |
用于同时计算一个角度(以弧度为单位)的正弦值和余弦值 |
double sinh(double x); |
用于计算一个数的双曲正弦值 |
float sinhf(float x); |
用于计算一个数的双曲正弦值 |
long double sinhl(long double x); |
用于计算一个数的双曲正弦值 |
1. setlinestyle
1.1 函数说明
函数声明 | 函数功能 |
---|---|
void setlinestyle( int linestyle, unsigned upattern, int thickness ); |
设置当前绘图窗口的线条样式、线型模式和线条宽度 |
参数:
- linestyle : 线条样式,取值范围为 0 到 4,不同的值对应着不同的线条样式,详见如下表格
- upattern : 线型模式,它是一个
16
位的无符号整数,用二进制位表示线型模式,其中1
表示绘制线条,0
表示空白。例如,如果upattern
的值是0x00FF
,则表示绘制一段线条,然后空白一段,重复这个过程直到结束。如果upattern
的值是0x5555
,则表示绘制一段虚线。 - thickness : 线条宽度,取值范围为 1 到 10,表示线条的像素宽度
线条样式 | 值 | 描述 |
---|---|---|
SOLID_LINE | 0 | 实线 |
DOTTED_LINE | 1 | 虚线 |
CENTER_LINE | 2 | 点线 |
DASHED_LINE | 3 | 长短线 |
USERBIT_LINE | 4 | 双点线 |
1.2 演示示例
1 | #include <graphics.h> |
1.3 运行结果
2. setmem
2.1 函数说明
函数声明 | 函数功能 |
---|---|
void *setmem(void *dest, size_t n, int c); |
用于将指定内存区域的每个字节都设置为指定的值 |
参数:
- dest : 要设置的内存区域的指针
- n : 要设置的字节数
- c : 要设置的值
·注意: setmem() 并不是标准 C 函数,而是 POSIX 标准库函数,因此可能并不被所有平台所支持。如果您的编译器或操作系统不支持 setmem() 函数,可以使用标准 C 库函数 memset() 来代替
2.2 演示示例
1 | #include <stdio.h> |
在上面的示例程序中,
- 我们首先使用
malloc()
函数分配了10
字节的内存空间,并将其赋值给指针变量 str。 - 然后,我们使用
setmem()
函数将str
指向的内存区域的每个字节都设置为'A'
。 - 最后,我们输出
str
的内容并使用free()
函数释放了分配的内存空间。
3. setmode
3.1 函数说明
函数声明 | 函数功能 |
---|---|
int setmode(int fd, int mode); |
它是 Windows 系统下的特定库函数,用于将指定文件的 I/O 模式设置为文本模式或二进制模式 |
参数:
- fd : 要设置模式的文件描述符,通常使用
fileno()
函数将文件指针转换为文件描述符 - mode : 要设置的模式,它可以取以下两个值中的一个:
_O_BINARY
:二进制模式_O_TEXT
:文本模式
注意: 在 Windows
系统中,文本模式和二进制模式之间的区别在于换行符的处理方式。在文本模式下,Windows
将回车符(\r
)和换行符(\n
)组成的字符序列映射为单个换行符(\n
),因此在读取文本文件时可以正确处理换行符。在二进制模式下,Windows
不对回车符和换行符做任何转换,因此在读取文本文件时可能会出现问题。
3.2 演示示例
1 | #include <stdio.h> |
在上面的示例程序中,我们首先使用 setmode()
函数将标准输入流的模式从二进制模式切换到文本模式;如果调用成功,则返回 0
,否则返回 -1
,并将错误信息存储在全局变量 errno
中。在程序中,我们使用 perror()
函数来输出错误信息。如果调用成功,则输出一条提示信息。
注意: setmode()
函数只适用于 Windows
系统下的 C/C++
编程,并且不是标准库函数,因此在跨平台编程时应该避免使用它。在 Unix/Linux
系统下,也可以使用 fcntl()
函数来设置文件描述符的模式。
3.3 运行结果
4. setpalette
4.1 函数说明
函数声明 | 函数功能 |
---|---|
void setpalette(int colornum, int color); |
设置调色板的颜色 |
参数:
- colornum : 要设置的调色板中的颜色数量
- color : 是一个整数类型的值,用于表示调色板中的颜色。这个参数可以是一个
RGB
值,也可以是一个预定义颜色名称,例如RED
或BLUE
。
4.2 演示示例
1 | #include <graphics.h> |
4.3 运行结果
5. setrgbpalette
5.1 函数说明
函数声明 | 函数功能 |
---|---|
void setrgbpalette(int colornum, int red, int green, int blue); |
用于设置当前绘图窗口的调色板中某个颜色的 RGB 值 |
参数:
- colornum : 要修改的颜色索引,取值范围为
0~255
。 - red、green 和 blue 要设置的
RGB
值,取值范围为0~255
。
5.2 演示示例
1 | #include <graphics.h> |
在上述的这个示例程序中,
- 我们首先使用
setbkcolor()
函数设置背景颜色为白色,然后清除原有屏幕使前面设置生效。 - 接着我们使用
setrgbpalette()
函数将第5
种颜色设置为蓝绿色,并使用setcolor()
函数将绘图颜色设为索引值5
(即蓝绿色); - 最后使用
line()
函数绘制了一条斜线。
5.3 运行结果
6. settextjustify
6.1 函数说明
函数声明 | 函数功能 |
---|---|
void settextjustify(int horiz, int vert); |
用于设置文本输出的对齐方式 |
参数:
- horiz : 水平对齐方式,可以取以下值:
LEFT_TEXT
:左对齐CENTER_TEXT
:居中对齐RIGHT_TEXT
:右对齐
- vert : 垂直对齐方式,可以取以下值:
TOP_TEXT
:顶部对齐CENTER_TEXT
:居中对齐BOTTOM_TEXT
:底部对齐
6.2 演示示例
1 | #include <graphics.h> |
在上述的示例程序中,我们使用 settextjustify()
函数将文本输出的对齐方式设置为居中对齐,然后使用 outtextxy()
函数在窗口的中心输出一行文本。
注意: 在使用 settextjustify()
函数设置对齐方式时,必须指定正确的参数值,并且同时考虑水平和垂直方向的对齐方式,否则可能会导致文本输出位置错误。
6.3 运行结果
7. settextstyle
7.1 函数说明
函数声明 | 函数功能 |
---|---|
void settextstyle(int font, int direction, int charsize); |
用于设置当前文本输出的字体、方向和大小 |
参数:
- font : 要使用的字体编号,可以取以下值:
DEFAULT_FONT
:默认字体TRIPLEX_FONT
:粗体三线字体SMALL_FONT
:小号字体SANS_SERIF_FONT
:无衬线字体GOTHIC_FONT
:哥特式字体SCRIPT_FONT
:手写字体
- direction : 文本输出的方向,可以取以下值:
HORIZ_DIR
:水平方向(从左到右)VERT_DIR
:垂直方向(从下到上)
- horiz : 水平对齐方式,可以取以下值:
DEFAULT_WIDTH
和DEFAULT_HEIGHT
:默认大小TRIPLEX_WIDTH
和TRIPLEX_HEIGHT
:大号尺寸SMALL_WIDTH
和SMALL_HEIGHT
:小号尺寸
7.2 演示示例
1 | #include <graphics.h> |
在上述的示例程序中,我们使用 settextstyle()
函数将文本输出的字体设置为粗体三线字体、方向设置为水平方向、大小设置为大号尺寸,然后使用 outtextxy()
函数在窗口的指定位置输出一行文本。
注意: 在使用 settextstyle()
函数设置文本样式时,必须指定正确的参数值,并且根据具体需求灵活选择字体、方向和大小,否则可能会导致文本输出不符合预期。
7.3 运行结果
8. settime
8.1 函数说明
函数声明 | 函数功能 |
---|---|
void settime(struct time *timep); |
设置当前系统时间 |
参数: |
- timep : 用于存储当前系统时间的结构体变量
8.2 演示示例
1 | #include <stdio.h> |
在上述的程序中,
- 我们首先定义了一个
struct time
类型的变量t
,用于存储当前系统时间。然后使用gettime()
函数获取当前时间,并将小时、分钟、秒和百分之一秒等信息存储到t
变量的对应成员变量中。 - 接着,程序使用
printf()
函数输出了当前的分钟数、小时数、百分之一秒数和秒数。这里使用了%d
占位符来指定输出整数类型的值。 - 最后,程序将 t 变量的分钟数加上了 1,然后使用 settime() 函数将修改后的时间写入系统时钟中。
注意 : 这个程序依赖于 DOS
系统提供的日期和时间相关函数,可能无法在其他操作系统或环境下运行。此外,直接修改系统时间可能会对计算机的正常运行产生影响,因此应该谨慎使用。
在现代的 Windows
操作系统中,DOS
环境已经被废弃,因此这个程序可能无法正常工作。如果要获取和修改当前系统时间,可以使用操作系统提供的相关 API
或系统调用接口实现。例如,在 Windows
平台上,可以使用 GetSystemTime()
和 SetSystemTime()
等函数来获取和设置系统时间。
9. setusercharsize
9.1 函数说明
函数声明 | 函数功能 |
---|---|
void setusercharsize(int multx, int dirx, int multy, int diry); |
用于设置用户定义的字符大小 |
参数:
- multx : 水平放大倍数,取值为正整数
- dirx : 水平方向,取值为
1
或-1
。当dirx
的值为1
时,字符不进行左右翻转;当dirx
的值为-1
时,字符进行左右翻转 - multy : 垂直放大倍数,取值为正整数
- diry : 垂直方向,取值为
1
或-1
。当diry
的值为1
时,字符不进行上下翻转;当diry
的值为-1
时,字符进行上下翻转。
9.2 演示示例
1 | #include <graphics.h> |
在上述这个示例程序中,我们使用 setusercharsize()
函数将当前字符的大小设置为水平方向放大 2
倍、垂直方向放大 3
倍,然后使用 outtextxy()
函数在窗口的指定位置输出一行文本。
注意: 在使用 setusercharsize()
函数设置字符大小时,必须指定正确的参数值,并且考虑到水平和垂直方向的缩放倍数,否则可能会导致字符输出不符合预期。
9.3 运行结果
10. setvbuf
10.1 函数说明
函数声明 | 函数功能 |
---|---|
int setvbuf(FILE *stream, char *buf, int type, unsigned size); |
用于设置文件流的缓冲方式 |
参数:
- stream : 要设置缓冲方式的文件指针,可以是标准输入流(
stdin
)、标准输出流(stdout
)或标准错误流(stderr
),也可以是通过fopen()
函数打开的文件指针 - buf : 缓冲区指针,可以是一个已经分配好的缓冲区,也可以是
NULL
。如果buf
参数为NULL
,则setvbuf()
函数将自动为文件流分配一块缓冲区 - type : 缓冲类型,可以取以下值:
_IONBF
:不使用缓冲区,直接从或向设备读写数据_IOLBF
:行缓冲,每行数据结束后刷新缓冲区_IOFBF
:全缓冲,填满缓冲区后才进行读写操作
- size: 缓冲区大小,如果
buf
参数不为NULL
,则size
参数指定了缓冲区大小;如果buf
参数为NULL
,则size
参数指定了系统为缓冲区分配的大小。size
参数只对全缓冲方式有效,行缓冲和无缓存方式忽略该参数
10.2 演示示例
1 | #include <stdio.h> |
在上述的示例程序中,
- 我们首先定义了两个文件指针变量
input
和output
,分别表示输入文件和输出文件。 - 然后调用
fopen()
函数打开输入文件和输出文件,并将返回的文件指针保存到对应的变量中。 - 接着,程序使用
setvbuf()
函数分别为输入文件和输出文件设置缓冲方式。对于输入文件,使用_IOFBF
缓冲类型和大小为512
字节的缓冲区;对于输出文件,使用_IOLBF
缓冲类型和大小为132
字节的缓冲区(此处bufr
缓冲区为空指针)。在设置完缓冲方式后,程序根据setvbuf()
函数的返回值判断是否设置成功,如果返回值不为 0,则说明设置失败,否则说明设置成功,并输出相应的提示信息。 - 最后,程序使用
fclose()
函数关闭输入文件和输出文件。
注意: 在使用文件流进行读写操作时,必须在适当的时候进行缓冲区清理操作,以避免数据丢失或者读取到过期数据等问题。另外,需要根据具体需求选择合适的缓冲方式和缓冲区大小,以实现最优的性能和稳定性。
10.3 运行结果
11. setviewport
11.1 函数说明
函数声明 | 函数功能 |
---|---|
void setviewport(int left, int top, int right, int bottom, int clipflag); |
用于设置绘图窗口的视口范围 |
参数:
- left : 视口矩形的左上角横坐标,取值为正整数或 0
- top: 视口矩形的左上角纵坐标,取值为正整数或 0
- right: 视口矩形的右下角横坐标,取值为正整数
- bottom: 视口矩形的右下角纵坐标,取值为正整数
- clipflag: 裁剪标志,可以取以下值:
CLIP_ON
:开启裁剪模式,只显示视口内的图形;CLIP_OFF
:关闭裁剪模式,显示整个画面。
11.2 演示示例
1 | #include <graphics.h> |
在上面的示例程序中,
- 我们首先使用
rectangle()
函数绘制了一个红色的矩形; - 然后使用
setviewport()
函数将视口范围设置为矩形 (150, 150) - (250, 250); - 最后使用
rectangle()
函数绘制了一个绿色的矩形,但这里只有在视口范围的矩形才显示出来。
注意: 在使用 setviewport()
函数设置视口范围时,必须指定正确的参数值,并考虑到裁剪模式的影响,否则可能会导致图形显示不符合预期。
11.3 运行结果
12. setvisualpage
12.1 函数说明
函数声明 | 函数功能 |
---|---|
void setvisualpage(int pagenum); |
用于设置图形窗口中用户可见的页面 |
参数:
- pagenum : 要设置的可视化页面页码,整数类型。
在双缓冲绘图中,我们通常会使用两个页面来绘制图像,一个是前台页面,另一个是后台页面。当我们绘制完一个完整的画面时,可以通过调用 setactivepage()
函数将后台页面切换到前台页面以显示出来。而 setvisualpage()
函数则用于设置用户当前看到的页面,它实际上是将指定的页面置于前台,从而更新屏幕上显示的内容。
12.2 演示示例
1 | #include <graphics.h> |
上述示例将在屏幕上绘制两个页面,并允许用户通过按任意键查看第二个页面。
注意: setvisualpage()
函数只能用于已经创建的图形窗口,且参数 pagenum
必须在 0
到 getmaxpages()
函数返回值之间。
12.3 运行结果
13. setwritemode
13.1 函数说明
函数声明 | 函数功能 |
---|---|
void setwritemode(int mode); |
用于设置绘画操作的写入模式 |
参数:
- mode: 要设置的写入模式,整数类型。常用的写入模式有以下三种:
COPY_PUT
:0,复制模式(默认),新绘制的图形将完全覆盖旧图形XOR_PUT
:1,异或模式,新绘制的图形将与旧图形进行异或运算后显示。在这种模式下,如果一个像素既在新图形中出现过,也在旧图形中出现过,则它最终不会被显示出来;如果一个像素只在新图形中出现过,或者只在旧图形中出现过,则它将会被显示出来。OR_PUT
:2,或模式,新绘制的图形将与旧图形进行或运算后显示。在这种模式下,如果一个像素既在新图形中出现过,也在旧图形中出现过,则它最终会被显示出来;如果一个像素只在新图形中出现过,或者只在旧图形中出现过,则它将会被显示出来。
13.2 演示示例
1 | #include <graphics.h> |
注意: setwritemode()
函数只对紧随其后的绘画操作生效,它不会影响之前已经绘制的图形。因此,在更改写入模式之前,必须先完成之前的绘画操作。
13.3 运行结果
14. signal
14.1 函数说明
函数声明 | 函数功能 |
---|---|
void (*signal(int signum, void (*handler)(int)))(int); |
用于设置指定信号的处理方式。当系统接收到某个信号时,会调用相应的信号处理函数来处理该信号。在调用 signal 函数时,需要指定要处理的信号以及相应的信号处理函数。 |
参数:
- signum : 要设置的信号编号,整数类型。常见的信号有很多种,如:
SIGINT
(中断信号):通常由用户按下 “Ctrl + C
“ 产生,用于中断正在运行的程序。SIGALRM
(闹钟信号):用于在指定的时间后向进程发送信号,可以用于实现定时器等功能。SIGFPE
(浮点异常信号):在发生浮点运算异常时发送该信号。SIGSEGV
(段错误信号):在访问非法的内存地址时发送该信号。
- handler : 要设置的信号处理函数,是一个指向函数的指针,其形式为
void handler(int)
返回值:
- 如果调用成功,返回之前对信号的处理方式(通常是一个函数指针)。如果之前没有设置过该信号的处理方式,返回默认的处理方式(通常是
SIG_DFL
或SIG_IGN
)。 - 如果调用失败,返回
SIG_ERR
。
14.2 演示示例
1 | #include <stdio.h> |
在上面的示例中,
- 我们首先使用
signal()
函数设置了一个处理SIGINT
信号的处理程序sigint_handler()
。 - 然后,在主循环中,我们随意输入一个字符后,就使用 raise() 函数向当前正在运行的进程发送 SIGINT 信号。当收到 SIGINT 信号时,程序将打印一条消息并退出。
14.3 运行结果
15. significand,significandf
15.1 函数说明
函数声明 | 函数功能 |
---|---|
double significand(double x); |
用于分离浮点数 x 的尾数部分(double) |
float significandf(float x); |
用于分离浮点数 x 的尾数部分(float) |
参数:
- x : 要求尾数的浮点数。
15.2 演示示例
1 | #include <stdio.h> |
注意: 在某些旧版本的编译器中,可能没有实现 significand 函数。这个时候可以考虑使用其他类似的函数来替代,如 frexp
、modf
等。
16. sin,sinf,sinl
16.1 函数说明
函数声明 | 函数功能 |
---|---|
double sin(double x); |
用于计算一个角度(以弧度为单位)的正弦值(double) |
float sinf(float x); |
用于计算一个角度(以弧度为单位)的正弦值(float) |
long double sinl(long double x); |
用于计算一个角度(以弧度为单位)的正弦值(long double) |
参数:
- x : 要求正弦值的角度,以弧度为单位
16.2 演示示例
1 | #include <stdio.h> |
16.3 运行结果
17. sincos,sincosf,sincosl
17.1 函数说明
函数声明 | 函数功能 |
---|---|
void sincos(double x, double* sinVal, double* cosVal); |
用于同时计算一个角度(以弧度为单位)的正弦值和余弦值 |
void sincosf(float x, float* sinVal, float* cosVal); |
用于同时计算一个角度(以弧度为单位)的正弦值和余弦值 |
void sincosl(long double x, long double* sinVal, long double* cosVal); |
用于同时计算一个角度(以弧度为单位)的正弦值和余弦值 |
参数:
- x : 要求正弦值和余弦值的角度,以弧度为单位
- sinVal : 存放计算得到的正弦值的指针
- cosVal : 存放计算得到的余弦值的指针
17.2 演示示例
1 | #include <stdio.h> |
17.3 运行结果
18. sinh,sinhf,sinhl
18.1 函数说明
函数声明 | 函数功能 |
---|---|
double sinh(double x); |
用于计算一个数的双曲正弦值 |
float sinhf(float x); |
用于计算一个数的双曲正弦值 |
long double sinhl(long double x); |
用于计算一个数的双曲正弦值 |
参数:
- x : 要求双曲正弦值的数,以弧度为单位
18.2 演示示例
1 | #include <stdio.h> |