差異

2011-12-21 83 views

回答

21

strlen()用於獲取字符/字符串數組的長度。

sizeof()用於獲取以字節爲單位的任何類型數據的實際大小。

此外,sizeof()是一個編譯時表達式,它提供了一個類型或變量類型的大小。它不關心變量的值。

strlen()是一個函數,它接受一個指向一個字符的指針,並從這個字符開始遍歷內存,尋找一個NULL字符。它計算找到NULL字符之前的字符數。換句話說,它給你一個C樣式的以NULL結尾的字符串的長度。

兩者幾乎不同。在C++中,你不需要任何非常多,strlen的()是C風格的字符串,這應該由C++所取代 - 風格std::strings,而對於sizeof() C中的主要應用是作爲參數傳遞的功能,如malloc()memcpy()memset(),所有這些都不應在C++中使用(使用新的,std::copy()std::fill()constructors)。

+1

1,但即使使用'的std :: copy'和'的std :: fill'你有如果使用的是C風格陣列,以提供陣列的元件的數量。與STL算法不同的是,memcpy/memset不是很多,但C數組/字符串vs std :: vector/std :: array/std :: string /其他容器。 – 2011-12-21 13:16:35

+2

「sizeof是編譯時表達式」 - 除非在C99中使用VLA。 – 2011-12-21 13:21:07

+1

只是一個nit,但是......有一個NULL指針和一個「空指針」,但它是一個nul字符(或者我喜歡的:一個'\ 0'字符)。 – 2011-12-21 13:32:33

9

sizeof不是方法。它是一個編譯時構造,用於確定特定類型或變量佔用的內存量。另一方面,函數計數從內存中的指定位置開始的連續的非零char值的數量(恰好與確定零終止的C串的長度相同)。