前言
C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。
字符串常量适用于哪些对它不做修改的字符串函数。
1、函数介绍
1.1 strlen
strlen:计算字符串长度
看一个代码:
#include <stdio.h>
#include <string.h>
int main()
{char arr[] = "abcdef";int len = strlen(arr);printf("%d", len);return 0;
}
输出值为6,对于strlen函数,它计算的是一个字符串'\0'前的字符个数,不包括'/0'自己,所以对于arr数组来说,其运算的长度就为6。下面我们写一个没有'\0'结尾的字符串,看看strlen求出的长度是多少。
可以看到,这次的输出结果就是不确定的,因为内存中'\0'出现的位置我们是不确定的,其求出来的值就是随机值。这样子求长度是没有意义的。所以使用strlen时,我们传过去的字符串必须时以'\0'结尾的。
strlen的返回值时size_t,是无符号的,看看下面这个例子:
#include <stdio.h>
#include <string.h>
int main()
{if (strlen("abc") - strlen("abcdef") > 0){printf(">\n");}else{printf("<");}return 0;
}
它最后输出值是:
输出为'>',证明了strlen的返回值是无符号的,这也是一些考试会出现的坑。
1.2 strcpy
strcpy:字符串拷贝
将source地址指向的数据拷贝到destination指向的数据空间中去。(包括字符中的'\0')
看例子:
#include <stdio.h>
#include <string.h>
int main()
{char name[20] = { 0 };strcpy(name, "zhangsan");printf("%s", name);return 0;
}
看到效果,name指针的内容被改为了"zhangsan",如果直接赋值是不允许的。字符串需要放到一个空间中时,就必需要用到strcpy函数。
深入讨论一下,如果说,被拷贝的内容resource中,在中途遇到'\0',strcpy会怎么处理呢,看一个函数:
我们发现,'\0'之后的内容没有被拷贝过去。
strcoy只会将'\0'之前的数据拷贝,所以,以后使用是,必须保证被拷贝的数据中包含'\0'。不然strcoy会一直拷贝下去。
下面再看一个例子:
#include <stdio.h>
#include <string.h>
int main()
{char* p = "abcedf";char arr[] = "bit";strcpy(p, arr);return 0;
}
这个代码运行起来是会报错的,因为我们是将p指向了常量字符串"abcdef"的地址,常量字符串是在只读内存区建立的,只能读取,不能更改,因此在尝试用strcpy去更改时会出错。
因此,我们在运用这些函数时,一定要注意细节。
1.3 strcat
strcat:字符串追加
函数功能是将source指向的内容,加到destination后面。
下面看例子:
#include <stdio.h>
#include <string.h>
int main()
{char arr1[20] = "hello";strcat(arr1, " world");printf("%s", arr1);return 0;
}
使用strcat时,我们要注意:1、目标空间要足够大,能够将要追加的内容包含住。2、被追加和追加的字符串(destination,source)中需要有'\0'。3、目标空间必须为可修改空间。
本篇暂时讲到这,后续还有两篇,感谢大家的观看,如果有帮助到你,我很高兴。