2012-06-06 39 views
2

可能重複:
How to pass a multidimensional array to a function in C and C++如何傳遞多維數組的指針在C

所以我有炭buffer[4][50]

我需要將其傳遞給方法或者至少這是我認爲它應該被格式化的方式。

所以我做SetBuffer(buffer);?在該方法中,我需要每一個元素設置成

void SetBuffer(char **buffer)
{
strncpy(buffer[0], "something", 50);

}

這可怎麼正確地完成?

+0

這看起來對我來說更C,然後C++ – pyCthon

回答

3

C++的方法是根據需要使用適當的容器(例如std::vector<unsigned char>std::string)。

OTOH,如果有一個特別的原因依傍數組,使用指針(因爲你已經這樣做),並通過在尺寸明確是做這件事..

+0

+1爲「使用適當的容器」。我會有類似的回答。 – Drise

+0

最好的辦法,我同意,因爲我做了一些研究,看到這是一個危險的設計,在這種情況下使用多維數組 – Pittfall

2

方法有很多種:

最簡單的是:

void SetBuffer(char[][50] buffer) 
{ 
strncpy(buffer[0], "something", 50); 
strncpy(buffer[1], "something else", 50); 

}

2

警告:這是一個C的答案。你的回答對我來說是正確的,但更好的方法是這樣的:

#define BUFFER_DIM_1 4 
#define BUFFER_DIM_2 50 

int i; 
char **buffer; 

/* Create an array of pointers to the lower level */ 
buffer = malloc(BUFFER_DIM_1 * sizeof(char *)); 
for (i=0; i<BUFFER_DIM_1; i++) { 
    buffer[i] = malloc(BUFFER_DIM_2 * sizeof(char)); 
} 

然後你可以使用你的建議。

對心臟的勇敢,你可以只用兩個mallocs去一些聰明指針工作:

#define BUFFER_DIM_1 4 
#define BUFFER_DIM_2 50 

int i; 
char **buffer; 

/* Create an array of pointers to the lower level */ 
buffer = malloc(BUFFER_DIM_1 * sizeof(char *)); 
buffer[0] = malloc(BUFFER_DUM_1 * BUFFER_DIM_2 * sizeof(char)); 
for (i=1; i<BUFFER_DIM_1; i++) { 
    buffer[i] = buffer[i-1] + BUFFER_DIM_2 * sizeof(char); 
} 

最後,不要忘記釋放所有此內存,當你不再需要它。

+0

這很好的C,但在C++中使用dirkgently回答 –