?由此代码可知:
1.两种不同的表达所输出的相同字符串长度并不相同
2.在printf函数中%zu与%d有什么区别。
?
? 1.sizeof和strlen区别如下:
本质:
? strlen是函数,sizeof是运算符。
功能:
? strlen测量的是字符的实际长度,以'\0'结束。
? sizeof测量的是字符的分配大小。
参数:
? strlen只能用char*做参数。
? sizeof可以用类型、函数等做参数。
计算时间:
? strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。
? 而大部分编译程序在编译的时候就把sizeof计算过了,是类型或是变量的长度。
? 2.printf函数中%d和%zu的区别
? %d输出int型。
? %zu输出size_t型。
size_t在库中定义为unsigned int。
一个是整型,一个是无符号整型。
补充:如果%zu不能使用,可以用%u取代。%zu不能输出负数。
? 3.关于计算字符串长度时是否要?\0的长度
? 一般意义上字符串数组的长度是不包括'\0'的。如char a[]=“China”;这个长度就等于5。其实在系统中a占了6个位置,最后一个放了一个'\0'。
? 但是你如果你写char a[]={'C','h','i','n','a'};这个长度也是5,但系统不会在最后放'\0',所以它在系统中只占5个位置。应该说,这个a只能叫“字符数组”,不能叫“字符串数组”。
呢么接下来的一个问题呢:那定义数组a的时候,中括号里面是填写5,还是6啊
答案:
如果是定义字符串数组,要多加一个,如:
char a[6]=“China”;
如果是定义字符数组,可不多加,如:
char a[5]={'c','h','i','n','a'};
但一般都只用一个空的中括号,让系统自行去处理!!!