2012-10-05 58 views
1

可能重複:
How to find the sizeof(a pointer pointing to an array)長度字符指針的C++

當聲明使用malloc例如一個字符指針。有沒有辦法確定分配的長度。

例如,如果我定義字符數組,我很容易找到元素

char a[10]; 
a[0]='c'; 
cout << sizeof(a)/sizeof(a[0]); 

的數目這將在另一方面產生10.如果我用字符指針

char *a; 
a = (char*)malloc(10); 
a[0] = 'c'; 
cout << sizeof(a)/sizeof(a[0]); 
試圖

然後它得到8,這顯然是指針的大小,而不是分配的長度。

是否有可能找到字符指針的分配長度?

我問這個而不使用std :: string或其他的原因是因爲我在解決一些面試問題時遇到了這個問題。所以它出於好奇

+3

旁邊的問題:你爲什麼要在C++中做'malloc'? –

+0

爲什麼不使用** std :: string **? – DumbCoder

+0

這是C的問題,而不是C++?也許改變標籤,至少添加C標籤,C人員有很多解決這個問題的方法。在C++中,我們使用std :: string。 – PiotrNycz

回答

6

SomeRandomGuyOnSO:

不,這不是。

我:

是的,它是,但它會是非標準和平臺有關。

除此之外,讓我不要重複關於使用標準C++容器的所有好建議;反而讓我實際上回答你的問題。對主題進行快速Google搜索可以提供執行此操作的方法。例子:

// OS X 
#include <malloc/malloc.h> 

char *buf = malloc(1024); 
size_t howManyBytes = malloc_size(buf); 
printf("Allocated %u bytes\n", (unsigned)howManyBytes); 

// Linux 
#include <malloc.h> 

char *buf = malloc(1024); 
size_t howManyBytes = malloc_usable_size(buf); 
printf("Allocated %u bytes\n", (unsigned)howManyBytes); 

// Windows, using CRT 

char *buf = malloc(1024); 
size_t howManyBytes = _msize(buf); 
printf("Allocated %u bytes\n", (unsigned)howManyBytes); 

所有這三個片段都應該打印1024或更大。

+0

我沒有記錄自己夠了,對於誤導性的帖子感到抱歉。 – tomahh

+0

@TomAhh沒問題,我不以任何方式生氣 - 多一點經驗,你會發現編程中很少有一個「不可能」的東西:) – 2012-10-05 16:00:40

+0

@ H2CO3謝謝你看起來像一個非常好的解決方案。你使用1024的大小,是否有這個原因,或者它可以是任何函數的任意任意大小的工作? –

2

malloc()並不真正知道數組或其他東西,它只是爲你分配一塊內存。除非您自己單獨追蹤,否則此空間的大小不適用於您。這就是爲什麼大多數處理數組的方法需要兩個參數,即數組和長度。