C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。
函数 | 功能简介 |
---|---|
memchr | 在内存块中定位字符的位置 |
memcmp | 把两个内存块的内容进行比较。 |
memcpy | 复制内存块的内容 |
memmove | 移动内存块中的内容 |
memset | 以字节方式填充内存块 |
strcat | 把一个字符串后追加到另一个字符串后 |
strchr | 在字符串中查找一个字符的第一个位置指针 |
strcmp | 比较两个字符串(ASCII) |
strcoll | 比较两个字符串(根据指定的 LC_COLLATE ) |
strcpy | 复制字符串 |
strcspn | 在一个字符串中查找另一个字符串中的第一个出现的字符的位置 |
strerror | 解释错误代码 |
strlen | 返回字符串长度 |
strncat | 把一个字符串的 n 个字符后追加到另一个字符串后 |
strncmp | 比较两个字符串的前 n 个字符(ASCII) |
strncpy | 复制字符串中的前 n 个字符 |
strpbrk | 查找字符串中第一个出现的属于另一个字符串的任意字符的指针 |
strrchr | 查找字符串中一个字符的出现的最后位置 |
strspn | 计算字符串的从开头起符合另一个字符串的连续字符个数 |
strstr | 在一个字符串中查找另一个字符串 |
strtok | 根据指定字符集分割一个字符串 |
strxfrm | 根据当前环境转化字符串,将转化后的前 n 个字符复制给另一个字符串 |
原型:const void * memchr ( const void * ptr, int value, size_t num );
void * memchr ( void * ptr, int value, size_t num );
说明:在参数 ptr
所指向的内存块的前 num
个字节中搜索第一次出现字符 value
(一个无符号字符)的位置,并返回相应的指针。
返回值:找到返回相应的指针,否则返回 NULL
。
实例:
#include
#include
char str[1000], ch, *pch;
int main(){
gets(str);
ch = getchar();
pch = (char*) memchr(str, ch, strlen(str)); // memchr 的使用
if ( pch != NULL){
printf ("%c found at %d.\n", ch, pch - str);
}else{
printf ("%c not found.\n", ch);
}
return 0;
}
原型:int memcmp ( const void * ptr1, const void * ptr2, size_t num );
说明:比较 ptr1
所指向的内存块的前 num
个字节和 ptr2
所指的内存块中的前 num
个字节(均被视为无符号字符进行比较)。
返回值:
返回值 | 比较的为指针所指向的内容 |
---|---|
< 0 | ptr1 < ptr2 |
0 | ptr1 == ptr2 |
> 0 | ptr1 > ptr2 |
实例:
#include
#include
char s1[] = "abcdefg", s2[] = "abcdfgh";
int main(){
int n = memcmp(s1, s2, sizeof(s1));
if ( n > 0 ){
printf ("'%s' is greater.", s1);
}else if( n == 0 ){
printf ("'%s' is the same as '%s'.", s1, s2);
}else{
printf ("'%s' is greater.", s2);
}
return 0;
}
原型:void * memcpy ( void * destination, const void * source, size_t num );
说明:从 source
指定的内存块中复制 num
个字节到 destination
指定的内存块中。
返回值:返回 destination
。
警告:复制字符串时,它只负责进行复制 num
个字节,不会检查 source
中的 NULL
指针。
实例:
#include
#include
int a = 10, b = 0;
char s1[] = "abcdefg", s2[100];
int main(){
memcpy(&b, &a, sizeof(a));
memcpy(s2, s1, strlen(s1) + 1);
printf ("b is %d, s2 is '%s'.\n", b, s2);
return 0;
}
原型:void * memmove ( void * destination, const void * source, size_t num );
说明:从 source
指定的内存块中移动 num
个字节到 destination
指定的内存块中。
返回值:返回 destination
。
警告:复制字符串时,它只负责进行复制 num
个字节,不会检查 source
中的 NULL
指针。
实例:
//去掉了字符串前面的 4 个空格。
#include
#include
char s[] = " too space";
int main(){
memcpy(s, s+4, strlen(s+4)+1);
printf ("s is '%s'.",s);
return 0;
}
原型:void * memset ( void * ptr, int value, size_t num );
说明:将 value
按无符号字节方式填充 ptr
所指的内存块,填充长度为 num
个字节。
返回值:返回 ptr
.
实例:
#include
#include
char str[] = "hello world!";
int a[100];
int main(){
memset(str, '-', strlen(str));
puts(str);
memset(a, 1, sizeof(int) * 100);
printf("%d", a[1]); // 实际为 0x01010101
return 0;
}
原型:char * strcat ( char * destination, const char * source );
说明:将 source
中的内容追加到 destination
中。
返回值:返回 destination
。
实例:
#include
#include
char s1[] = "hello ", s2[] = "world!";
int main(){
strcat(s1,s2);
puts(s1);
return 0;
}
原型:const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
说明:返回 str
中的 character
出现的第一个位置的指针。
返回值:如果找到,返回 str
中的 character
出现的第一个位置的指针;否则返回 NULL
。
实例:
#include
#include
char str[] = "hello world!", ch = 'o';
int main(){
char *pch = strchr(str, ch);
if ( pch != NULL){
printf (" '%c' is found at %d.\n", ch, pch - str);
}else{
printf ("'%c' is not found.\n", ch);
}
return 0;
}
原型:int strcmp ( const char * str1, const char * str2 );
说明:比较字符串 str1
和 str2
的字典序大小(ASCII)。
返回值:
返回值 | 比较的为指针所指向的内容 |
---|---|
< 0 | str1 < str2 |
0 | str1 == str2 |
> 0 | str1 > str2 |
实例:
#include
#include
char s1[] = "abcdefg", s2[] = "abcdfgh";
int main(){
int n = strcmp(s1, s2);
if ( n > 0 ){
printf ("\"%s\" is greater.", s1);
}else if( n == 0 ){
printf ("\"%s\" is the same as \"%s\".", s1, s2);
}else{
printf ("\"%s\" is greater.", s2);
}
return 0;
}
原型:int strcoll ( const char * str1, const char * str2 );
说明:默认情况下(LC_COLLATE
为 “POSIX” 或 “C” )和 strcmp
一样根据 ASCII 比较字符串大小。对于设置了 LC_COLLATE
语言环境的情况下,则根据 LC_COLLATE
设置的语言排序方式进行比较。例如:汉字,根据拼音进行比较。
返回值:
返回值 | 比较的为指针所指向的内容 |
---|---|
< 0 | str1 < str2 |
0 | str1 == str2 |
> 0 | str1 > str2 |
实例:用法同 strcmp
一样,判断规则由 LC_COLLATE
决定。
原型:char * strcpy ( char * destination, const char * source );
说明:将 source
的内容复制给 destination
,需要保证 destination
足够容纳 source
的内容。
返回值:返回 destination
。
实例:
#include
#include
char s1[] = "abcdefg", s2[100];
int main(){
strcpy(s2, s1);
printf ("s2 is '%s'.", s2);
return 0;
}
原型:size_t strcspn ( const char * str1, const char * str2 );
说明:返回 str1
中出现的第一个属于 str2
的字符的位置。
返回值:如果找到返回字符位置,否则返回字符串长度。
实例:
#include
#include
int main(){
int pos = strcspn("qwert1234des","0123456789");
printf("%d", pos);
return 0;
}
原型:char * strerror ( int errnum );
说明:给出错误代码 errnum
的描述内容。
返回值:返回描述错误内容的字符串指针。
实例:
#include
#include
#include
int main(){
FILE *f = fopen("unexist.file", "r");
if( f == NULL ){
printf ("Error: %s\n",strerror(errno));
}
return 0;
}
原型:size_t strlen ( const char * str );
说明:返回字符串 str
的长度。
返回值:返回字符串 str
的长度。
实例:
#include
#include
int main(){
char a[] = "hello world!";
printf("%d", strlen(a));
return 0;
}
原型:char * strncat ( char * destination, const char * source, size_t num );
说明:将 source
中的前 num
个字符串追加到 destination
后。
返回值:返回追加后的 destination
指针。
实例:
#include
#include
char s1[] = "hello ", s2[] = "world! -----";
int main(){
strncat(s1, s2, 6);
puts(s1);
return 0;
}
原型:int strncmp ( const char * str1, const char * str2, size_t num );
说明:比较 str1
中的前 num
个字符和 str2
中 的前 num
个字符的大小。
返回值:
返回值 | 比较的为指针所指向的内容 |
---|---|
< 0 | str1 < str2 |
0 | str1 == str2 |
> 0 | str1 > str2 |
实例:
#include
#include
char s1[] = "abcdfgh", s2[] = "abcdefg";
int main(){
int n = strncmp(s1, s2, 4);
if ( n > 0 ){
printf ("\"%s\" is greater in the first 4.", s1);
}else if( n == 0 ){
printf ("\"%s\" is the same as \"%s\" in the first 4.", s1, s2);
}else{
printf ("\"%s\" is greater in the first 4.", s2);
}
return 0;
}
原型:char * strncpy ( char * destination, const char * source, size_t num );
说明:将 source
中的前 num
个字符复制给 destination
。如果 source
的长度大于 num
,不会自动追加 \0
。若小于,则会填充\0
,直到长度为 num
。
返回值:返回 destination
的指针。
实例:
#include
#include
int main(){
char a[1000], b[1000] = "hello world!";
strncpy(a, b, 5); //不会自动补 NULL
a[5] = '\0';
puts(a);
return 0;
}
原型:const char * strpbrk ( const char * str1, const char * str2 );
char * strpbrk ( char * str1, const char * str2 );
说明:查找字符串 str1
中第一个出现的属于字符串 str2
中的任意字符的指针。
返回值:返回字符串 str1
中第一个出现的属于字符串 str2
中的任意字符的指针。若没找到,返回 NULL
。
实例:
#include
#include
int main(){
char a[] = "This is a test.", b[] = "aeiou";
char *pch = strpbrk(a, b);
printf("%d", pch - a);
return 0;
}
原型:const char * strrchr ( const char * str, int character );
char * strrchr ( char * str, int character );
说明:在字符串中 str
查找最后一个 character
的指针位置。
返回值:如果找到,在字符串中 str
查找最后一个 character
的指针位置。否则返回 NULL
。
实例:
#include
#include
char str[] = "hello world!", ch = 'o';
int main(){
char *pch = strrchr(str, ch);
if ( pch != NULL ){
printf ("'%c' is found at %d.\n", ch, pch - str);
}else{
printf ("'%c' is not found.\n", ch);
}
return 0;
}
原型:size_t strspn ( const char * str1, const char * str2 );
说明: 计算 str1
字符串从开头开始的连续字符,且这些字符都完全是 str2
所指字符串中的字符。
返回值:返回字符的个数。
实例:
#include
#include
int main(){
char a[] = "aaaaauuuuuxxxsada", b[] = "aeiou";
int n = strspn(a, b);
printf("%d", n); //输出为10,满足条件的字符串为aaaaauuuuu。
return 0;
}
原型:const char * strstr ( const char * str1, const char * str2 )
char * strstr ( char * str1, const char * str2 )
功能:查找字符串 str1
中首次出现字符串 str2
的位置。
说明:返回 str1
中首次出现 str2
的位置的指针,如果 str1
中不存在 str2
则返回 NULL
。
实例:
#include
#include
int main(){
char a[] = "hello world!", b[] = "world";
char *pch = strstr(a, b);
printf("%d", pch - a);
return 0;
}
原型:char * strtok ( char * str, const char * delimiters );
说明:根据 delimiters
指定的内容进行分割。第一次需传入待分割的字符串 str
指针,之后的调用传入 NULL
即可。
返回值:返回指向分割后相应的片段的指针。
实例:
#include
#include
char str[] ="- This is a sample string.";
int main (){
char *pch = strtok(str, " .-,");
while( pch != NULL){
printf("%s\n", pch);
pch = strtok(NULL, " .-,");
}
return 0;
}
原型:size_t strxfrm ( char * destination, const char * source, size_t num );
说明:根据当前环境(由LC_COLLATE
所指定)转化 source
字符串,并将前 num
个字符复制给 destination
。
返回值:返回转换后的字符串的长度。