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



