簡體   English   中英

C linux中sizeof和strlen之間的區別

[英]difference between sizeof and strlen in C linux

第一個printf語句給出輸出3和第二個給出20.可以請任何人解釋這兩者之間的區別是什么?

char frame[20],str[20];
printf("\nstrlen(frame)= %d",strlen(frame));
printf("\nsizeof(frame) = %d",sizeof(frame));

謝謝 :)

sizeof是一個編譯sizeof算符,用於確定類型消耗的字節大小。 framechar[20] )的情況下是20個字節。

strlen是一個運行時函數,它掃描一個給定的指針,直到第一次出現nul終結符'\\0' ,然后返回字符數。

  1. 因為frame的內容未初始化,這意味着它不是有效的C字符串,因此strlen(frame)可以返回任何值或崩潰。 實際上,在這種情況下,它的行為是不確定的。

  2. 因為frame是一個包含20個字符的數組,所以sizeof(frame)將返回20 * sizeof(char) ,它將始終為20( sizeof(char)始終等於1)。

strlen實際上為您提供了字符串的長度,而sizeof為您提供了以字節為單位的已分配內存的大小。 在這里很好地解釋了http://www.cplusplus.com/reference/cstring/strlen/以下提取的摘錄。

C字符串的長度由終止空字符確定:AC字符串與字符串開頭和終止空字符之間的字符數一樣長(不包括終止空字符本身)。

這不應該與保存字符串的數組的大小混淆。 例如:

char mystr [100] =“測試字符串”;

定義了一個大小為100個字符的字符數組,但是初始化了mystr的C字符串的長度只有11個字符。 因此,當sizeof(mystr)的計算結果為100時,strlen(mystr)返回11。

是的,根據其他評論,你試圖獲得未初始化字符串的長度,並導致未定義的行為,它可以是3或其他任何東西,這取決於為你的字符串分配的內存中存在的任何垃圾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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