char msg[100] = {’C’,’P’,’R’,‘E’,‘\0’,‘2’,‘8’, ‘8’,‘\0’};
int my_length = 0xFFFFFFFF;
my_length = strlen(msg);
我认为这是九,然而,答案是4.任何人都可以解释?感谢
答案 0 :(得分:3)
strlen
一旦命中空终止符就会停止计数(因为C使用空终止字符串并且期望只在字符串的末尾找到它们)。
在第一个空终止符之前有四个字符,因此长度为4。
答案 1 :(得分:3)
strlen
返回4,因为msg
中的(第一个)字符串被\0
msg[4]
终止。但是,数组 msg
的长度为100 char
,因为它已被声明为此。
答案 2 :(得分:1)
请记住,在C中,字符串只是一个字符值序列,后跟一个零值终结符。字符串存储在char
(或wchar_t
的数组中,用于宽字符串),但并非每个char
(或wchar_t
)数组都是字符串。要存储长度为N
个字符的字符串,您需要一个至少 N + 1
元素的数组来说明终结符。
strlen
返回从指定地址开始直到零终止符的字符串中的字符数。
要获取msg
数组的大小(以字节为单位),请使用sizeof
运算符:
char msg[100] = {'C','P','R','E','\0','2','8','8','\0'};
size_t my_length = strlen( msg );
size_t my_size = sizeof msg;
if ( my_length >= my_size )
// whoopsie
在这种情况下,您实际上是将两个字符串存储在一个数组中("CPRE"
和"288"
)。
msg
数组的 size 为100(由声明给出)。
从"CPRE"
开始的字符串 msg[0]
的长度为4,因为数组的第五个元素('\0' == 0
)中有一个零终结符。
从"288"
开始的字符串msg[5]
的长度为3,因为在数组的第九个元素中有另一个零终结符。
答案 3 :(得分:0)
也许这是你的
中的拼写错误char msg[100] = {’C’,’P’,’R’,‘E’,‘\0’,‘2’,‘8’, ‘8’,‘\0’};
你想要
char msg[100] = {’C’,’P’,’R’,‘E’,‘0’,‘2’,‘8’, ‘8’,‘\0’};
(显然:CPRE0288
),所以二进制0
(而不是字符表示0 ,即'0'
)过早地完成你的字符串。
答案 4 :(得分:0)
您不能假设strlen
的返回值表示数组的大小。
strlen
将获取指向字符串开头的指针,并在查找空终止符时递增指针;一旦发现,它返回计数器(即在找到空值之前的增量数)。
您声明msg
的长度为100,但只填充了数组中的9个元素。 sizeof(msg)
将为100.
您是否真的在问“我如何才能找出在数组中初始化了多少个值”?对此真的没有答案。