2012-11-05 28 views
0
void * ptr0 = (void*)"Buffer_1"; 
int size0 = sizeof(ptr0); 
// WILL THIS RETURN THE NUMBER OF BYTES OCCUPIED BY THE MEMORY POINTED BY ptr0? 

我的要求是
1)存儲在緩衝區&一些數據創建一個void *指針指向它,我在1號線正在做的。
2)後來我想在BYTES中獲得這個緩衝區的大小。第二行將完成這項工作。在C++中使用指向緩衝區(字符串「」)的void指針使用sizeof()以獲取BYTES中的大小?

+0

你所問的是不僅沒有發生什麼變化,但它根本不可能。例如,考慮一下'ptr0'是否指向兩個具有相同開始內容的不同對象(比如說一個整數或者兩個整數的數組)。 sizeof'怎麼能知道你想要的大小? –

+0

只要使用std :: string或std :: vector ,你就是在努力的去做一件困難的事情。 – john

回答

6

sizeof返回該類型所需的大小。由於在這種情況下傳遞給sizeof的類型是指針,它將返回指針的大小。

如果您需要指針指向的數據大小,您必須通過顯式地存儲它來記住它。

+0

我會補充說,如果你需要看到字符串的大小,而不是指針使用數組,即char arr [] =「string」;那麼sizeof(arr)會返回字符串的長度 – fayyazkl

+1

@fayyazkl:我寧願增加:[char a \ [\] =「string」之間的區別是什麼?和char * p =「string」;](http://stackoverflow.com/questions/9460260/what-is-the-difference-between-char-a-string-and-char-p-string/9631091#9631091 ) –

1

sizeof()在編譯時工作。所以sizeof(ptr0)通常會返回4或8個字節。改用strlen?或者實際存儲不。由(void *)保存在一個單獨的變量中的字節數。

2

不,這隻會返回您的指針的大小以字節爲單位。使用sizeof得到一個數組的大小隻能在聲明如下

char szArray[10]; 

不是數組動態創建陣列工作

char* pArray = new char[10]; 

sizeof(szArray); // number of elements * sizeof(char) = 10 
sizeof(pArray); // sizeof the pointer 
相關問題