#include <stdio.h>
int main()
{
char arr[]= {'g', 'e', 'e', 'k', 's'};
printf("%d %d", sizeof(arr),strlen(arr));
return 0;
}
我输出为5 6,我无法理解为什么我得到6而不是5因为字符数组的长度是5?
答案 0 :(得分:0)
要获得string
的大小,应使用strlen()
。
strlen()
需要\0
终止字符串
答案 1 :(得分:0)
以guard let device = captureDevice else {
print("Device is nil!")
return
}
// Do things with device
结尾的char
数组也被视为字符串;因此请注意'\0'
的数组大小为arr
,而5
的数组大小为str
,但字符串大小为6
(str
)是strlen
,
5
即,
#include <stdio.h>
#include <string.h>
int main()
{
char arr[]= {'g', 'e', 'e', 'k', 's'};
char str[]= {'g', 'e', 'e', 'k', 's', '\0'};
printf("sizeof arr %d \n", sizeof(arr));
printf("sizeof str %d \n", sizeof(str));
printf("strlen str %d \n", strlen(str));
return 0;
}
答案 2 :(得分:0)
当您编写char arr[] = {'g', 'e', 'e', 'k', 's'};
时,您有字符数组,因此sizeof(arr)
为您提供arr的长度,以字节为单位,但是当您编写char arr[] = "geeks";
时,您将拥有&#39; \ 0&#39;字符自动在arr的末尾,因此arr的大小为6个字节。
答案 3 :(得分:0)
根据C标准(7.1.1术语定义)
1字符串是以和结尾的连续字符序列 包括第一个空字符。
和
...字符串的长度是null之前的字节数 字符
函数strlen
(7.23.6.3 strlen函数)计算空字符前面的字符数组中的字符数:
2 strlen函数计算指向的字符串的长度 第
至于sizeof
运算符(6.5.3.4 sizeof和alignof运算符)
2 sizeof运算符产生其操作数的大小(以字节为单位) 可以是表达式或类型的带括号的名称。大小是 根据操作数的类型确定。
此声明声明字符数组的大小由初始化程序的数量
决定char arr[]= {'g', 'e', 'e', 'k', 's'};
根据C标准(6.7.9初始化)
22如果初始化未知大小的数组,则确定其大小 通过具有显式初始化器的最大索引元素。
所以数组恰好有5个元素。根据{{1}}运算符表达式
的定义,其类型为char[5]
abd
sizeof
产生其操作数sizeof(arr),
的大小(以字节为单位),即5。
数组不包含空字符。因此,函数arr
无法计算空字符前面的字节数。在这种情况下,其行为是未定义的。它将计算数组之外的所有字节,直到它包含空字符。因此表达
strlen
可以产生任何大于5的结果。
您可以使用字符串文字初始化数组,例如
strlen(arr)
在这种情况下,数组也由字符串文字的空字符初始化。此初始化等同于
char arr[]= {"geeks"};
在这种情况下,数组的大小
char arr[]= {'g', 'e', 'e', 'k', 's', '\0'};
等于6.并且因为数组具有空字符表达式
sizeof(arr),
将精确计算空字符前面的5个字符。