[英]what is the length of this array? c language
char msg[100] = {’C’,’P’,’R’,‘E’,‘\0’,‘2’,‘8’, ‘8’,‘\0’};
int my_length = 0xFFFFFFFF;
my_length = strlen(msg);
我以為是九點,但是答案是4.有人可以解釋嗎? 謝謝
strlen
遇到空終止符時, strlen
將立即停止計數(因為C使用空終止的字符串,並且期望僅在字符串末尾找到它們)。
第一個空終止符前有四個字符,因此長度為4。
strlen
返回4是因為msg
的(第一個) 字符串以msg[4]
處的\\0
終止。 但是, 數組 msg
的長度為100 char
因為它是這樣聲明的。
也許是你的錯字
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'
) 過早地完成了字符串。
您不能假定strlen
的返回值代表數組的大小。
strlen
將獲取一個指向字符串開頭的指針,並在尋找空終止符時遞增該指針; 一旦找到該值,它將返回計數器(即找到空值之前的增量數)。
您聲明msg
的長度為100,但僅填充了數組中的9個元素。 sizeof(msg)
將為100。
您實際上是在問“我如何找出數組中初始化了多少個值”嗎? 真的沒有答案。
請記住,在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
數組的大小為100(由聲明指定)。
從msg[0]
開始的字符串 "CPRE"
的長度為4,因為在數組的第五個元素( '\\0' == 0
)中有一個零終止符。
從msg[5]
開始的字符串"288"
的長度為3,因為在數組的第九個元素中還有另一個零終止符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.