前言
在C语言中,字符串是没有类型的,通常我们将字符串放在字符数组当中,因为在C语言的运用中对字符串的操作是很频繁地,因为对字符串的操作频繁,所以C语言本身提供了一些对字符串进行处理的库函数。如下
函数 | 作用 |
strlen | 求字符串长度 |
strcpy | 复制字符串 |
strcat | 将俩个不同数组中的字符串连接 |
strcmp | 比较两个字符串的大小,返回比较的结果 |
strncpy | 复制字符串(有限制) |
strnct | 字符串的结尾追加n个字符(有限制) |
strncmp | 比较两个字符串的大小(有限制) |
strstr | 搜索一个字符串在另一个字符串中的第一次出现。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址,如果未找到所搜索的字符串,则返回NULL。 |
strtok | 将字符串分割成一个个片段 |
strerror | 将错误码转化成错误信息 |
字符串函数
1.1 strlen
size_t strlen(const char* str);
该函数要注意的细节如下:
(1).字符串已经'\0'作为结束标识,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')。
(2).参数的字符串必须要以'\0'结束,不能没有'\0'。
(3).注意函数的返回值是size_t,是无符号的。
size_t实际就是无符号整形,虽然没有确切的证明,但是根据推测,size_t就是对 unsigned int 的重命名。
函数的使用方法:
使用strlen函数需要包含头文件#include<string.h>
函数的实现:
2.长度不受限制的字符串函数(操作的是整个字符串)
2.1strcpy
char* strcpy (char* destination, const char* source);
该函数要注意的细节点如下:
(1).源字符串必须以'\0'结束;
(2).该函数会将源字符串中的'\0'一起拷贝到目标空间中,如果目标字符串原先就有内容,就会被拷贝的内容覆盖掉,包括'\0'也是;
(3)目标空间必须足够大,以确保能存放源字符串,如果放不下就会造成数组越界访问,为非法访问空间;
(4)目标空间必须可变,不能是常量字符串。
函数使用:
函数的实现:
2.2 strcat
char*strcat(char* destination,const char* source)
该函数要注意的细节点如下:
(1)源字符串必须以 '\0' 结束;
(2)目标空间必须有足够的大,能容纳下源字符串的内容;
(3)目标空间必须可修改。
函数使用:
函数的实现:
2.3 strcmp
int strcmp (const char * str1,const * str2);
该函数要注意的细节点如下:
(1)第一个字符串大于第二个字符串,则返回大于0的数字;
(2)第一个字符串等于第二个字符串,则返回0;
(3)第一个字符串小于第二个字符串,则返回小于0的数字。
提示:在 VS 环境中,第一种情况返回的是 1 ,第二种情况同样返回 0 ,第三种情况返回 -1 。
函数使用:
函数的实现:
也可以将if和else的内容修改成return *str1-*str2;
但是这样要注意返回值不一定为1或者-1。
3.长度受限制的字符串函数
上面的三个函数操作的都是整个字符串,尔下面的三个函数就像是它们的衍生版本,可以操作整个字符串,也可以操作字符串的部分内容。
3.1strncpy
char* strncpy(char* destination,const char*source,size_t num)
需要注意的细节点有:
(1)如果源字符串的长度小于 num ,则拷贝完源字符串之后,在目标的后边追加 0 ,直到 num 个;
(2)拷贝 num 个字符就只会拷贝 num 个字符,不会再往后补上一个"\0 "。
比较俩个代码我们发现,当arr1拷贝的数量超过了arr2的本身的数量就拷贝到了arr2的‘\0’后面追加为0。
函数实现:
3.2 strncat
char* strcat(char* destination, const char* source, size_t num);
需要注意的细节点有:
同样的,这个函数与strcat在使用上也只有新增一个参数来确认需要追加字符串中的多少个字符的区别而已,这个函数使用起来就比strncpy省心多了,因为这个函数会在追加之后再追加一个'\0'。
函数的使用:
函数的实现:
3.3 strncmp
char* strncmp(const char*str1, const char* str2,size_t num);
这个函数使用方法与strcmp相比也只有最后一个参数的区别。
函数使用:
函数的实现:
4.字符串查找
4.1 strstr
char* strstr(const char* str1,const char*str2);
这是一个可以判断一个字符串是否是另一个字符串的子串的函数,如果str2是str1的子串,那么返回str2在str1中首次出现的位置的地址。这个函数使用起来很简单方便,并且没有太多需要注意的细节,只需要正常使用即可。
函数使用:
函数的实现: