strlen()
strlen()是一种(计算字符串的长度)的库函数。它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)取决于传给strlen参数的首地址。开始扫描字符串直到\'0'结束,其返回值不包括'\0'。
函数声明
size_t strlen(const char* string);
头文件:string.h
参数:必是char*类型
返回类型size_t 是(unsigned int)字符串长度最少都是零,不可能是负数所以是(unsigned int)
示例1(vs2019 32位)
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcde";
char arr2[] = {'a','b','c','d','e'};
char arr3[] = { 'a','b','c','d','e','\0'};
char arr4[] = { 'a','b','c','\0','d','e' };
printf("%d\n",strlen(arr1));//5
printf("%d\n", strlen(arr2));//随机值
printf("%d\n", strlen(arr3));//5
printf("%d\n", strlen(arr4));//3
return 0;
}
需要注意的是strlen在执行时直到找到'\0'才停下来
在这里arr1是数组名,传给strlen的参数是首元素a的地址,strlen从a开始寻找'\0',找到'\0' 并返回(但不包括'\0') 从a到'\0'之间的字符串长度。所以第一个是5。
arr2里面没有'\0' 所以strlen在执行时直到找到'\0'才停下来,这个位置是不确定的,在不同的编译器下的值是不一样的,所以是随机数。
那么和arr1一样的道理 在arr3和arr4不同位置下加入'\0'结果也是不同的
sizeof()
.sizeof() 是C中的关键字,它是一种单目操作符,而不是函数。其作用是根据所给的操作数,计算出操作数所占内存空间的大小,单位是字节(bit)。操作数可以是类型、指针、数组和函数等
示例2(vs2019 32位)
#include<stdio.h>
int main()
{
int i = 0;
int arr1[4] = { 0 };
char arr2[] = "abcde";
printf("%d\n", sizeof(i));//4
//求的是int类型的大小 4 单位是字节
printf("%d\n", sizeof(arr1));//16
//求的是arr1数组的大小 数组有四个元素每个元素是int类型的大小
//所以4*4 =16个字节
printf("%d\n", sizeof(arr2));//6
//求的是arr1数组的大小 数组有6元素每个元素是char类型的大小
//所以6*1 =6个字节
return 0;
}
需要注意的是arr1是数组名,但是当它单独放在sizeof的圆括号里面时
此时arr1就不是首元素的地址而是 整个数组 既sizeof求的是整个数组的大小
sizeof在求字符串的长度时包含了'\0',而strlen是没有包含'\0'
strlen() 和 sizeof()的用法示例3(vs2019 32位)
#include<stdio.h>
int main()
{
//字符数组
char arr[] = { 'a','b','c','d','e','f' };
printf("%d\n", sizeof(arr));//6
//arr单独放在()里,sizeof此时求的是种整个数组的大小
//有6个元素每个元素为char类型 既6*1
//注意里面是否包含'\0' sizeof在计算时要包含'\0'
printf("%d\n", sizeof(&arr));//4
//&数组名(arr) 表示取出整个数组的地址
//在32位系统下指针的大小是4个字节
//指针个变量,用来存放地址 sizeof此时求的是地址的大小 既 4
printf("%d\n", sizeof(arr[1]));//1
//arr[1]表示字符'b' sizeof此时求的字符'b'的大小
//类型是char大小为 1
printf("%d\n", strlen(arr));//随机值
//printf("%d\n", strlen(*arr));//error
// strlen的参数是char*类型 arr数组名表示首元素
// a的地址通过*(解引用)找到的是字符'a'不符合strlen的参数要求
//printf("%d\n", strlen(arr[1]));//error
//arr[1]找到的是字符'b',不符合strlen的参数要求
printf("%d\n", strlen(&arr));//随机值
//&数组名(arr) 表示取出整个数组的地址
//strlen从取出的地址开始寻找'\0' 直到找到'\0'才停下来,
//这个位置是不确定的,在不同的编译器下的值是不一样的,所以是随机数
return 0;
}