2017-04-16 200 views
-3

我創建了以下陣列:爲什麼sizeof(str)8當字符串有26個字符?

char* myarr= "data successfully inserted"; 

當我做

sizeof(myarr) 

我得到8.爲什麼我得到的是?如果1個字符是1個字節,那麼myarr的大小應該是26,只需要對字符進行計數?

+1

因爲您正在獲取*指針的大小*您應該將其聲明爲'char [] myarray =「data successfully inserted」;',這將節省8個字節的空間。 – EJP

+1

如果表達式'e'具有類型'T','sizeof(e)'等價於'sizeof(T)'。給定類型的所有對象都具有相同的大小。 – molbdnilo

+2

因爲你濫用'sizeof',並且應該首先使用'std :: string',然後只在你確實需要時使用原始字符數組。 – StoryTeller

回答

4

在您的平臺上,char指針是8個字節。這是指針變量的大小,而不是它指向的大小。如果你想要一個字符串的長度,請致電strlen(myarr)

0

因爲這是系統上指針的大小。如果你想獲得一個字符串的長度,你應該使用strlen()函數。

0

sizeof(myarr)不是字符串的大小,但在您的平臺上的大小爲char * pointe r,它給你8 bytes。數組的大小可以通過以下方式計算:strlen(myarr)

相關問題