关于求字符串长度时‘\0‘是否需要数进去

发布时间:2024年01月20日

4bbf99fafcd4495c84b12ec472955182.png

?由此代码可知:

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'};

但一般都只用一个空的中括号,让系统自行去处理!!!

文章来源:https://blog.csdn.net/Z021027/article/details/135708554
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。