一、前言:
1、求字符串长度:
1.1-strlen
2、长度不受限制的字符串函数:
1.2-strcpy
1.3-strcat
1.4-strcmp
3、长度受限制的字符串函数:
1.5-strncpy
1.6-strncat
1.7-strncmp
4、字符串查找:
1.8-strstr
1.9-strtok
5、错误信息报告:
1.10-strerror
6、内存操作函数:
1.11-memcpy
1.12-memmove
1.13-memset
1.14-memcmp
二、字符串介绍:
1.1-strlen:
size_t strlen ( const char * str );
功能:
该函数的功能是得到一个字符串的长度。
性质:
1.字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数 (不包含 '\0' )。
2.参数指向的字符串必须要以 '\0' 结束。
3.注意函数的返回值为size_t,是无符号的( 易错 )
代码及效果如图所示:
1.2-strcpy:
char* strcpy(char * str1, const char * str2 );
功能:
该函数为字符串拷贝函数,功能是将字符串str2中元素拷贝到字符串str1中。
性质:
1.字符串str2必须以 '\0' 结束。
2.会将字符串str2中的 '\0' 拷贝到目标空间。
3.目标空间str1必须足够大,以确保能存放字符串str2。
4.目标空间str1必须可变。
代码及效果如图所示:
1.3-strcat:
char * strcat ( char * str1, const char * str2 );
功能:
该函数实现的功能是将str2的内容追加到str1后。
性质:
1.字符串str2必须以 '\0' 结束。
2.目标空间str1必须有足够的大,能容纳下字符串str2的内容。
3.目标空间str1必须可修改。
代码及效果如图所示:

1.4-strcmp:
int strcmp ( const char * str1, const char * str2 );
功能:
用于比较字符串的大小,这里比较的是字符串第一个字符的ASCLL码值的大小,若相同则比较下一个字符。
性质:
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
代码及效果如图所示:



1.5-strncpy:
char * strncpy ( char * str1, const char * str2, size_t num );
功能:
将str2中num个元素个数拷贝到str1上。
性质:
1.拷贝num个字符从字符串str2到目标空间str1。
2.如果字符串str2的长度小于num,则拷贝完字符串str2之后,在目标的后边追加0,直到num个。
代码及效果如图所示:


1.6-strncat :
char * strncat ( char * str1, const char * str2, size_t num );
功能:
将字符串str2中的num个元素追加到str1后。
性质:
1.字符串str2必须以 '\0' 结束。
2.目标空间str1必须有足够的大,能容纳下字符串str2的内容。
3.目标空间str1必须可修改。
代码及效果如图所示:

1.7-strncmp:
int strncmp ( const char * str1, const char * str2, size_t num );
功能:
比较str1和str2中num个字符的大小,这里比较的是字符串第一个字符的ASCLL码值的大小,若相同则比较下一个字符。。
性质:
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
代码及效果如图所示:


1.8-strstr :
char * strstr ( const char *str1, const char * str2);
功能:
strstr() 函数搜索字符串str2在字符串str1中的第一次出现的位置。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址,如果未找到所搜索的字符串,则返回NULL。
代码及效果如图所示:


1.9-strtok:
char * strtok ( char * str, const char * sep );
功能:
通过分隔符来分隔字符串。
性质:
1.sep参数是个字符串,定义了用作分隔符的字符集合
2.第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标
记。
3.strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
并且可修改。)
4.strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
5.strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
6.如果字符串中不存在更多的标记,则返回 NULL 指针。
代码及效果如图所示:

1.10-strerror :
char * strerror ( int errnum );
功能:
返回错误码,所对应的错误信息。
代码及效果如图所示:

1.11-memcpy:
void * memcpy ( void * str1, const void * str2, size_t num );
功能:
函数memcpy从str2的位置开始向后复制num个字节的数据到str1的内存位置。
性质:
1.函数memcpy从str2的位置开始向后复制num个字节的数据到str1的内存位置。
2.这个函数在遇到 '\0' 的时候并不会停下来。
3.如果str2和str1有任何的重叠,复制的结果都是未定义的。
代码及效果如图所示:
注:这里整型为4个字节num为12时拷贝到str1的数量为三个元素

1.12-memmove:
void * memmove ( void * str1, const void * str2, size_t num );
功能:
函数memmove从str2的位置开始向后复制num个字节的数据到str1的内存位置。
性质:
1.和memcpy的差别就是memmove函数处理的str2内存块和str1内存块是可以重叠的。
2.如果str2空间和str1空间出现重叠,就得使用memmove函数处理。
代码及效果如图所示:

1.13-memset:
void *memset( void *str, int c, size_t num);
功能:
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 num 个字符。
性质:
1.int c为ASCLL码值 。
2. str为可变空间。
代码及效果如图所示:

1.14-memcmp:
int memcmp ( const void * str1, const void * str2, size_t num );
功能:
比较从str1和str2指针开始的num个字节
性质:
标准规定:
str1大于str2,则返回大于0的数字
str1等于str2,则返回0
str1小于str2,则返回小于0的数字
代码及效果如图所示:


结语:
上述内容,即是我个人对常见字符串+内存函数的个人见解。若有大佬发现哪里有问题可以私信或评论指教一下我这个小萌新。非常感谢各位友友们的点赞,关注,收藏与支持,我会更加努力的学习编程语言,还望各位多多关照,让我们一起进步吧!
