求字符串长度
蘿strlen
长度不受限制的字符串函数
蘿strcpy
蘿strcat
蘿strcmp
长度受限制的字符串函数介绍
蘿strncpy
蘿strncat
蘿strncmp
字符串查找
蘿strstr
蘿strtok
错误信息报告
蘿strerror
蘿字符分类函数:
字符操作内存操作函数
蘿memcpy
蘿memmove
蘿memcmp
蘿memset
求字符串长度
蘿strlen
size_t strlen ( const char * str );
- 字符串已经 ' ' 作为结束标志,strlen函数返回的是在字符串中 ' ' 前面出现的字符个数(不包含 ' ' )。
- 参数指向的字符串必须要以 ' ' 结束。
- 注意函数的返回值为size_t,是无符号的( 易错 )
问题举例1:(参数指向的字符串必须要以 ' ' 结束)
问题举例2:(注意函数的返回值为size_t,是无符号的( 易错 ))
学会模拟实现 - strlen
学会模拟实现 - strlen()(使用指针减去指针的方式进行统计)
学会模拟实现 - strlen()(使用递归的方式进行统计)
长度不受限制的字符串函数
蘿strcpy
char* strcpy(char * destination, const char * source );
将源指向的C字符串复制到目标指向的数组中,包括终止空字符(并在此停止)
- 源字符串必须以 ' ' 结束。
- 会将源字符串中的 ' ' 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
问题举例1:(源字符串必须以 ' ' 结束) (会将源字符串中的 ' ' 拷贝到目标空间)
问题举例1:(目标空间必须足够大,以确保能存放源字符串)
学会模拟实现 - strcpy
学会模拟实现 - 进行简化
蘿strcat
char * strcat ( char * destination, const char * source );
- 将源字符串的副本追加到目标字符串。终止空字符在destination中被源的第一个字符覆盖,并且包含一个空字符在新字符串的末尾,
将两者连接在destination中形成。
- 源字符串必须以 ' ' 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
- 字符串自己给自己追加。
错误代码和上面strlen是一个概念这里就不写了。
正确代码书写方式:
学会模拟实现 - strcat
蘿strcmp
int strcmp ( const char * str1, const char * str2 );
这个函数开始比较每个字符串的第一个字符。如果它们相等其他情况下,它继续使用以下对,直到字符不同或终止达到零字符
标准规定:
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
问题举例1:
正确书写方式:
学会模拟实现 - strcmp
学会模拟实现 - strcmp
长度受限制的字符串函数介绍
蘿strncpy
char * strncpy ( char * destination, const char * source, size_t num );
- 将源的第一个num字符复制到目标。如果源C字符串的结尾(由空字符表示)在复制num字符之前找到,
Destination使用零填充,直到总共写入了num个字符
- 拷贝num个字符从源字符串到目标空间。
- 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
蘿strncat
char * strncat ( char * destination, const char * source, size_t num );
- 将源的第一个num字符附加到目标,再加上一个终止的空字符。如果源文件中C字符串的长度小于num,则只包含直到终止的内容
null字符复制
蘿strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
- 比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
字符串查找
蘿strstr
char * strstr ( const char *str1, const char * str2);
返回一个指向str1中第一个出现的str2的指针,如果str2不是str1的一部分,则返回一个空指针str1。
学会模拟实现 - strstr()
蘿strtok
char * strtok ( char * str, const char * sep );
- sep参数是个字符串,定义了用作分隔符的字符集合
- 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
- strtok函数找到str中的下一个标记,并将其用 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数
切分的字符串一般都是临时拷贝的内容并且可修改。)
- strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
- strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
- 如果字符串中不存在更多的标记,则返回 NULL 指针。
strtok的正确使用方式:
strtok的正确使用 - 优化
错误信息报告
蘿strerror
- 返回错误码,所对应的错误信息。
- 返回错误码,所对应的错误信息。
蘿字符分类函数:
| 函数 | 如果他的参数符合下列条件就返回真 |
| iscntrl | 任何控制字符 |
| isspace | 空白字符:空格‘ ’,换页‘f’,换行'n',回车‘r’,制表符't'或者垂直制表符'v' |
| isdigit | 十进制数字 0~9 |
| isxdigit | 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F |
| islower | 小写字母a~z |
| isupper | 大写字母A~Z |
| isalpha | 字母a~z或A~Z |
| isalnum | 字母或者数字,a~z,A~Z,0~9 |
| ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
| isgraph | 任何图形字符 |
| isprint | 任何可打印字符,包括图形字符和空白字符 |
字符操作内存操作函数
蘿memcpy
void * memcpy ( void * destination, const void * source, size_t num );(内存块的拷贝)
- 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
- 这个函数在遇到 ' ' 的时候并不会停下来。
- 如果source和destination有任何的重叠,复制的结果都是未定义的。
memcpy的正确使用方式:
学会模拟实现 - memcpy()
蘿memmove
void * memmove ( void * destination, const void * source, size_t num );
- 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
- 如果源空间和目标空间出现重叠,就得使用memmove函数处理。
memmove的正确使用方式:
学会模拟实现 - memmove()
首先我们画图分析一下:如何才能正确的进行拷贝:
代码实现:
蘿memcmp
void * memcpy ( void * destination, const void * source, size_t num );
- 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
- 这个函数在遇到 ' ' 的时候并不会停下来。
- 如果source和destination有任何的重叠,复制的结果都是未定义的。
memcmp的正确使用方式:
蘿memset
void * memset ( void * ptr, int value, size_t num );
- 将ptr指向的内存块的第一个num字节设置为指定的值(解释为unsigned char)
memset的正确使用方式:



