这个数组的长度是多少? c语言

时间:2016-11-16 20:03:59

标签: c

char msg[100] = {’C’,’P’,’R’,‘E’,‘\0’,‘2’,‘8’, ‘8’,‘\0’};
int my_length = 0xFFFFFFFF;
my_length = strlen(msg);

我认为这是九,然而,答案是4.任何人都可以解释?感谢

5 个答案:

答案 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.

您是否真的在问“我如何才能找出在数组中初始化了多少个值”?对此真的没有答案。