前言
在c语言中我们在求解字符串和字符数组长度时候总会用到两个关键字sizeof和strlen。我是很容易把他们搞错所以我在这给记录下来他们的使用。这里普通的大家都知道,我这里主要对象是数组。
一、计算机中的单位
在计算机中,计算机可读入的是含有二进制的数也就是只包含1和0这两个数字,当我这里二进制位有一个0或者1要存储的时候,如下图,我们这里需要存储二级制位1,计算机给它开辟了一个空间,我们把存储一个数字1的单位叫做计算机的最小单位:bite(比特位),8个比特位构成一个字节(byte)。
二、sizeof的使用
1,sizeof代码使用方法
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
2.sizeof定义
1,sizeof是一个单目操作符,它是求取操作数的类型长度/变量所占内存空间的大小(以字节为单位),它不关注内存中存放的具体内容,也就是他求数组的时候不管数组里面有没有’ \0 '。记住千万不要搞混 ,sizeof不是函数!
2,对于普通的sizeof求解就如上方代码所示,对于sizeof的用法还有一个就是计算数组的大小,元素个数,一个元素所占的空间大小
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
//定义一个整型数组,里面有十个元素
int arr[10] = { 0 };
//求出来值40 计算的是整个数组的大小,单位是字节
printf("%d\n",sizeof(arr));
//求出来值4 求一个元素所占的空间
printf("%d\n", sizeof(arr[0]));
//用它整个数组大小除以他一个元素所占空间大小得出他的元素个数
printf("%d\n", sizeof(arr) / sizeof(arr[0]));
return 0;
}
3,这里最容易搞混的就是字符数组了,在这里先讲解三个混淆概念:数字0,字符0,和’\0’。字符’0’它的ASCII的值是48,'\0’它的ASCII值是0。
在这里用代码来表示:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char arr1[5] = "abcd";
char arr2[] = { 'a','b','c','d' };
char arr3[] = { 'a','b','c','d',0 };
char arr4[] = { 'a','b','c','d','0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
printf("%s\n", arr3);
return 0;
}
运行结果:
注:字符串的结束标志是一个\0的转义字符,在计算字符长度的时候\0是结束标志,不算作字符内容。
三,strlen的使用
1,strlen代码使用方法
代码如下(示例):
注意:strlen在测字符串长度时候遇到’\0’,结束
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcd";
char arr2[] = { 'a','b','c','d' };
int len1 = strlen(arr1);
int len2 = strlen(arr2);
printf("%d\n", len1);
printf("%d\n", len2);
return 0;
}
2,strlen定义
strlen是一个求字符串长度的一个库函数,注意只是求字符串长度的一个函数,只针对字符串,不能求其他类型变量的长度! 它在使用求解字符串长度的时候,从参数给定的位置一直向后寻找’\0’,统计’\0’之前出现字符的个数。它的头文件是string.h,在使用的时候需要对它进行包含头文件。
三,strlen和sizeof的区别
1,sizeof是运算符,是一个单目操作符,而strlen是c语言标准库函数
2,strlen测量的只是字符串的实际长度,以’\0’结束,返回结果不包括’\0’。而sizeof测量的是字符的总元素的空间大小,包括’\0’转义字符的单位大小,他的参数可以是数组,指针,类型,对象,函数等等。具体而言当参数分别如下时,sizeof返回的值含义如下:
1,数组-编译时分配的数组空间大小;
2,指针-存储该指针所用的空间大小;
3,类型-该类型所占的空间大小:
4,函数-函数返回类型所占空间的大小;
在初阶学习,最容易搞混的就是它的求取返回值,这里代码来表示一下吧:
字符串里面有五个字符分别是’a’,‘b’,‘c’,‘d’,‘\0’;由此可以看出sizeof在求数组大小时候把’\0’的所占空间大小也算进去了,也就是sizeof的返回值里面包括’\0’,而strlen在求字符串长度的时候,不返回’\0’;
总结
例如:以上就是今天要讲的内容,本文仅仅介绍了strlen和sizeof的使用和混淆的错误,特别是求解字符串的时候。