1.字符串简介
字符串是一串连续的且以\0结尾的字符
char arr[]="zhangsan";//将字符串存到数组里面
char*a="lisi";//常量字符串
char arr1[]={'z','h','a','n','g'};//字符数组
注意:
1.以第一种形式初始化字符串时,计算机会自动在字符串末尾加上\0,所以在给数组申请内存空间时,需要多申请一个字节的内存来存放\0
2.第二种形式是常量字符串,是不可以被修改的
3.第三种形式是字符数组,末尾没有\0,输出时需要一个字符一个字符的输出,如果想要像字符串一样一次输出,可以在最后一个字符末尾手动加上一个\0(在确保内存空间足够的情况下),然后用%s打印
4.一个字符占用一个字节的内存空间
5.字符串也可以是中文,一个中文汉字占两个字节(GBK编码)
2.字符串函数
2.1字符串函数的头文件
#include<string.h>
2.2 strlen()函数
2.2.1strlen函数的原型(计算字符串长度)
size_t strlen ( const char * str );
strlen函数的形参是一个char类型的地址,因为我们需要防止字符串的内容被修改,所以加上
const防止内容被修饰,返回值是size_t类型,也就是无符号整形,因为字符串的个数不可能为负数
2.2.2举例说明
#include<stdio.h>
int main()
{
char arr[] = "1234567890";
size_t len = strlen(arr);
printf("%zd", len);
return 0;
}
因为strlen的返回值是size_t,所以我们用size_t len来接收返回值,当然也可以用int来接收,结果也是正确的
2.2.3模拟实现strlen()函数
模拟1(计数)
size_t my_strlen(const char* str)
{
assert(str);//断言str是否为空指针
size_t count = 0;
while (*str)//因为\0的的ASCLL码为0,所以当str指向\0时,不进行循环
{
count++;//如果str不指向\0,那么count++,统计字符个数
str++;//统计完一个字符,向后走一个字节
}
return count;
}
模拟2(递归)
size_t my_strlen1(const char* str)
{
assert(str);
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
模拟3(指针减指针)
size_t my_strlen(const char* str)
{
assert(str);
char* p = str;
while (*str)
{
str++;
}
return str - p;
}
2.3 strcpy()函数
2.3.1strcpy函数的原型(字符串拷贝)
char * strcpy ( char * destination, const char * source );
char*destination用来接收拷贝的目标地址,const char *source用来接收源字符串地址