目录
1、字符数组的定义
字符数组(也称为字符串数组)用于存储一系列字符(包括字符串)。字符串实际上是一个字符数组,在C语言中是以字符数组的形式表示的,并且通常以空字符“\0”作为结束符,以标记字符串的结束。
一般形式为:
字符数组中的一个元素存放一个字符,它在内存中占用一个字节。
C语言中没有字符串类型,字符串是存放在字符型数组中的。
字符串的输出占位符为“%s”。
字符串的结束标志位为 “\0” ,在内存中字符串的最后被自动加了一个 “\0” 。
2、字符串的长度
字符数组的大小是在声明时指定的,它决定了数组可以容纳的字符数量(包括字符串的结束符\0
)。当你声明一个字符数组时,你需要确保数组的大小足够大,以容纳你想要存储的字符串以及结束符。
如果你想要存储字符串"Hello, World!",你需要考虑这个字符串的长度(12个字符)以及结束符\0
(1个字符),所以你需要一个至少13个字符大小的字符数组。
在C语言中,sizeof
和strlen
都是用于获取长度的操作符或函数,但它们的行为和用途是不同的。
1. sizeof
对于字符数组(即字符串),sizeof
返回的是整个字符数组(包括空字符\0
)的大小(以字节为单位)。但是,如果你传递一个指向字符数组的指针给sizeof
,它将返回指针的大小(这取决于你的平台和编译器,通常是4字节或8字节,而不是数组的实际大小)。
2. strlen
strlen
是一个函数,定义在string.h
头文件中。它计算字符串的长度(不包括空字符\0
),并返回该长度。这意味着strlen
需要在运行时遍历字符串,直到找到空字符\0
为止。因此,如果你试图对一个未初始化的字符数组或未以空字符结束的字符数组使用strlen
,可能会导致未定义的行为。
在这个例子中,我们首先定义了一个字符串 str
,它包含 "Hello, World!"
并自动以空字符结尾。然后,我们使用 strlen
函数计算这个字符串的长度,并将结果存储在 len
变量中。接着,我们输出这个长度。
之后,我们修改了字符串 str
,在第6个位置(索引为5)插入了空字符,从而截断了字符串。再次调用 strlen
函数时,它将只计算到新的空字符为止的长度,并输出结果。
总结
sizeof
在编译时计算其操作数的大小(以字节为单位),对于字符数组,它返回整个数组的大小。strlen
在运行时计算字符串的长度(不包括空字符\0
),并返回该长度。
当处理字符串时,通常使用strlen
来获取字符串的长度,除非你需要知道整个字符数组(包括未使用的部分)的大小,这时可以使用sizeof
。但请注意,当你将字符数组作为函数参数传递时,sizeof
将不再返回数组的大小,而是返回指针的大小。