今天是复习到C语言的字符串和字符数组的大小长度比较的内容
字符串和字符数组的表现形式
同样是char类型,字符串和字符数组在表现形式上就有很大的差异
char a[] = "ABCDEF";
char b[] = { 'A','B','C','D','E','F' };
例如在这段简单的代码中,char a[]是字符串,char b[]是字符数组,虽然两个都是char类型,也由相同的字符组成,但是他们的大小,长度都是不一样的,这是由于计算机在对于二者的处理是不同的,如果是字符串,则计算机会自动在其最后加入'\0'表示结束,所以在计算机中真正显示的应该是char a[]="ABCDEF\0",但是在字符数组中,则不会添加\0作为终止符,如果需要求其长度,要么对字符数组进行初始化,例如char b[10]={'A','B','C','D','E','F'},要么手动添加\0作为终止,例如char b[10]={'A','B','C','D','E','F','\0'},否则求出来的长度是随机数值。
sizeof和strlen
从表面上看,sizeof求的是表面大小,所见即所得
char a[] = "ABCDEF";
char b[] = { 'A','B','C','D','E','F'};
printf("%d,%d\n", sizeof(a), sizeof(b));
上述代码的运行结果是7,6,大家可以发现,由于a[]和b[]虽然看起来都是六个字符,但是输出的大小有一个字节的误差,这是因为系统会在字符串后面自动添加\0,因此虽然a[]看起来是六个字符,实际上是七个,而由于字符数组并没有系统添加的\0,因此是六个。
char a[] = "ABCDEF";
char b[] = { 'A','B','C','D','E','F'};
printf("%d.%d", strlen(a), strlen(b));
上述代码的运行结果是6,50,这是由于我们既没有给b[]规定大小长度,也没有在里面添加\0作为终止,因此系统则一直寻找\0,直到找到\0才会输出此数组大小。
char a[] = "ABCDEF";
char b[] = { 'A','B','C','D','E','F','\0'};
printf("%d,%d\n", sizeof(a), sizeof(b));
printf("%d.%d", strlen(a), strlen(b));
经过修改,此时代码的运行结果为
7,7
6,6
通过上面代码我们可以发现,sizeof和strlen都可以求得字符串和字符数组的大小,但是strlen在字符数组中受\0的限制,sizeof在计算长度的时候会将\0作为字符一起计算在内,个人认为如果遇到题目让比较字符串和字符数组的长度,用sizeof是更好的选择。
这就是今天的收货,over,over,欢迎指教~