簡體   English   中英

這個數組的長度是多少? C語言

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM