今天带大家来学习string.h中的函数。
第一类:复制函数
1) memcpy
函数原型:
void * memcpy ( void * destination, const void * source, size_t num );
可以把源地址之后的num个单位内存内容复制到目标地址。
注意:该函数不会识别终止符,当num大于destination指向的内存空间时,可能造成越界访问。
如果source和destination发生重叠,不建议使用memcpy函数进行复制,可能造成意想不到的结果。可以使用memmove进行代替。
2)memmove
函数原型:
void * memmove ( void * destination, const void * source, size_t num );
可以把可以把源地址之后的num个单位内存内容移动到目的地地址。与memcpy一样,memmove也是内存复制函数,并且可以克服source与destination重叠的问题。
注意:跟memcpy一样,可能造成越界。
3)strcpy
函数原型:char * strcpy ( char * destination, const char * source );
可以把源字符串复制到目标字符串。
注意:目标字符串的空间应该足够大,不然可能造成越界访问。
4)strncpy
函数原型:
char * strncpy ( char * destination, const char * source, size_t num );
可以把源字符串的前num个字符复制到目标字符串。
注意:目标字符串空间应该大于等于num。当num>source的长度时,复制不完全,目标字符串结尾不含有‘\0’,直接读取会发生溢出。
第二类:连接函数
1)strcat
函数原型:
char * strcat ( char * destination, const char * source );
将源字符串拼接到目标字符串之后,在新字符串之后增加一个休止符。
注意:目标字符串空间需要足够大。
2)strncat
函数原型:
char * strncat ( char * destination, const char * source, size_t num );
将源字符串的前num个字符拼接到目标字符串之后,然后增加一个休止符。
注意:目标字符串空间需要足够大。
第三类:比较函数
1)memcmp
函数原型:
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
两两比较两个指针指向位置的后num个字节。
注意:一旦存在某个字节不同时,就会返回一个整形,并且退出比较。这个整形描述了该字节的大小关系。如果所有字节都相同,则返回零。
2)strcmp
函数原型:
int strcmp ( const char * str1, const char * str2 );
两两比较两个字符串的字符。
注意:一旦存在某个字符不同时,就返回一个整形,并且退出比较。这个整形描述了该字符的大小关系。如果所有字符都相同,则返回零。如果某个字符串更长,结果是该字符串更大。
3)strncmp
函数原型:
int strncmp ( const char * str1, const char * str2, size_t num );
在两个字符串之间比较前num个字符。
注意:如果某个字符串提前达到终止符,比较会直接结束。
第四类:查找函数
1)memchr
函数原型:
const void * memchr ( const void * ptr, int value, size_t num ); void * memchr ( void * ptr, int value, size_t num );
在给定指针指向位置的num个字节范围内,查找value,如果有,就返回指向第一个value的指针。
注意:这里value虽然是int类型,但是查找是逐字节发生的。
2)strchr
函数原型:
const char * strchr ( const char * str, int character ); char * strchr ( char * str, int character );
在给定字符串内查找字符。如果有,就返回第一个指向该字符的指针。
注意:休止符同样视为字符串的一部分。
3)strcspn
函数原型:
size_t strcspn ( const char * str1, const char * str2 );
给定需要查找的字符串str1,以及查找对象的集合str2,返回str1中第一次出现str2集合中的任意字符的位置。如果没有找到,返回str1的长度。
注意:查找包含休止符。
4)strspn
函数原型:
size_t strspn ( const char * str1, const char * str2 );
与strspn正好相反,给定需要查找的字符串str1,以及查找对象的集合str2,返回str1中第一次未出现str2集合中的任意字符的位置。如果没有找到,返回0。
注意:查找不包含休止符,但以休止符为停止标志。
5)strstr
函数原型:
const char * strstr ( const char * str1, const char * str2 ); char * strstr ( char * str1, const char * str2 );
在目标字符串str1中寻找与str2相同的子串
注意:查找不包含休止符,但以休止符为停止标志。
6)strtok
函数原型:
char * strtok ( char * str, const char * delimiters );
在字符串中查找间隔符,其中delimiters是所有间隔符的集合。
如果str不为null,视为对源字符串第一次调用该函数,就返回指向第一个子串的指针,并将第一个分隔符置为0。如果str为null,就从源字符串内上一次分割符的位置开始,查找下一个分隔符,并返回指针指向这两个分割符之间的子串,将下一个分隔符置为0。一旦查找到str的休止符,那么之后所有的函数调用(str为null),都返回null。
注意:strtok会自动保存上一次函数调用时的处理位置。
strtok会破坏源字符串,建议使用源字符串的拷贝版本进行操作。
其他类型:
1)memset
函数原型:
void * memset ( void * ptr, int value, size_t num );
内存赋值函数。对指定的内存空间逐字节赋值为value,赋值字节数为num
2)strerror
函数原型:
char * strerror ( int errnum );
输入错误码返回错误信息。
3)strlen
函数原型:
size_t strlen ( const char * str );
返回给定字符串长度。