金牌会员
 
- 积分
- 1255
- 金钱
- 1255
- 注册时间
- 2017-11-18
- 在线时间
- 296 小时
|

楼主 |
发表于 2018-1-13 10:25:32
|
显示全部楼层
看了大家的回复,大部分是在讨论sizeof和strlen这两个问题上,还有就是会不会计算内存大小,字符数组初始化要不要给数组先指定大小的问题
1.字符数组初始化时候可以我们指定数组大小,也可以不指定,当我们不指定数组大小时候,那么在初始化时候编译器会自己计算并决定数组的大小
2.而且编译器也会自己在后面添加\0,因此并不存在找不到\0而得到一个数组大小随意值。
3.sizeof它是一个关键字而不是函数,sizeof(int)和sizeof int,这两个计算的结果在32位系统下面结果都是4,一个有(),一个没有(),因此sizeof不是函数,而是关键字。相反strlen是函数。strlen()用于计算字符串中字符的数目(也就是字符长度,以字符为单位给出字符串长度,但是一个字符占用一个字节),当它遇到\0时候就会停止,因此它计算的结果中并不包括\0在内。而sizeof关键字计算得是在内存中占用的空间,在我们初始化字符数组时候,虽然只有A~H这8个字符,但是编译器会在后面自己加上\0,因此sizeof在计算时候它的结果将\0包含在内。
4.虚心向前辈们请教,感谢大家给出自己的见解,我C语言刚刚接触不久,里面有什么说的不对的知识点大家可以提出来,我回去看书找资料或者经过代码验证确认后改正,谢谢。大家共同进步~~~~~~~~~~
5.以上不明白的地方,大家也可以编译一下下面这段代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char SendBuff[] = "ABCDEFGH";
int len_1 = 0;
int len_2 = 0;
len_1 = strlen(SendBuff);
len_2 = sizeof(SendBuff);
printf("strlen = %d\n", len_1);
printf("sizeof = %d\n", len_2);
return 0;
}
输出结果:
strlen = 8
sizeof = 9 |
|