库函数:别人写好的,让我们直接去使用
1.降低了门槛
2.提高的效率
标准库函数(C语言自带的)+第三方库函数(如果需要使用需要额外下载安装)
const char*
char const*这两个作用是相同的,都是规定了指针指向的内容不能发生变化。
char* const这个规定了指针本身不能发生变化。
strlen函数的意义是求字符串的长度,所以规定了const char* 指针指向的内容不能发生变化。
size_t 是一个typedef出来的类型别名
通常情况下,size_t是unsigned long
size_t在标准库中是很常见的。
c string是有问题的,故我们使用std::string
学习某个东西,分成了三个层次:
1.会用
2.理解里面的一些坑,和注意事项
3.能够实现
//使用if来对参数进行检查
if (str == NULL) {
return 0;
}
//使用断言来对参数进行检查
assert(str != NULL);
size_t len = 0;
对NULL解引用是未定义行为,会不会崩溃,说不准!!!
但是使用assert(断言),一定会崩溃,是确定性行为。并且会给出明确的错误信息。
错误的不同级别:
char * strcpy ( char * destination, const char * source );
目标 源
把source中的数据拷贝到destination中
strlen size_t
strcpy
1.拷贝的时候,把\0也一起拷贝过去了
2.要求destination的内存空间足够大,能够容纳下str指向的字符穿的长度(包括\0)
如果内存空间不够,就有可能出现越界的情况。导致未定义行为。
strcat:字符串拼接
这个啊,同样也需要保证dest对应的内存空间足够大,能够容纳下最终的拼接结果。
strcmp:字符串比较,比较字符串的大小/相等。
比较规则:字典序。
int main(){
char str1[1024] = "hello";
char str2[1024] = "hello111";
str1的下一个字符就是'\0'
str2的下一个字符就是'1',\0就是ascil码为0的字符。所以一定是\0小
strncpy
strncat
strncmp
里面多了一个n其实就是在限定读取/拷贝字符的个数
strcpy和strcat都要求dest对应的空间足够大。
strncpy和strncat就是多加了一层限制。通过n限制最大拷贝数量的个数,从而避免越界的情况。是比较鸡肋的设定。
strncmp比较两个字符串的前n个字符,相当于比较两个字符串的前半部分。
strstr:字符串匹配
判定str2是否是str1的字串。或者str1是否包含str2.
strstr:参数就是一个短的字符串和一个长的字符串。判定短的是否被长的包含。
它的返回值类型是char*。
如果str1包含了str2,此时返回值的char*就指向str1中str2首次出现的位置。
如果str1不包含str2,就返回NULL