2

可能重复:
如何将多维数组传递给 C 和 C++ 中的函数

所以我有 charbuffer[4][50]

我需要将它传递给一个方法void SetBuffer(char **buffer),或者至少我认为它应该被格式化。

所以我SetBuffer(buffer);呢?在方法中我需要设置每个元素

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

如何正确完成?

4

3 回答 3

3

C++ 方法是酌情使用适当的容器(例如std::vector<unsigned char>std::string)。

OTOH,如果有特殊原因需要依赖数组,使用指针(就像你已经做过的那样)并明确传递维度是一种方法。

于 2012-06-06T14:55:57.243 回答
2

有很多方法:

最简单的是:

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

}

于 2012-06-06T14:58:09.583 回答
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));
}

然后,您可以按照您的建议使用。

对于勇敢的心,你可以只使用两个 malloc 和一些更聪明的指针工作:

#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);
}

最后,不要忘记在不再需要时释放所有这些内存。

于 2012-06-06T15:01:21.543 回答