可能重复:
How to pass a multidimensional array to a function in C and C++
所以我有char buffer[4][50]
我需要将它传递给方法void SetBuffer(char **buffer)
,或者至少我认为它是如何格式化的。
所以我做SetBuffer(buffer);
?在方法中我需要设置每个元素
void SetBuffer(char **buffer)
{
strncpy(buffer[0], "something", 50);
strncpy(buffer[1], "something else", 50);
}
如何才能正确完成?
答案 0 :(得分:3)
C ++的方法是在适当的时候使用适当的容器(例如std::vector<unsigned char>
或std::string
)。
OTOH,如果有一个特殊的理由要回到数组,使用指针(就像你已经做的那样)并明确地传递维度是一种方法来实现它。
答案 1 :(得分:2)
有很多方法:
最简单的是:
void SetBuffer(char[][50] buffer)
{
strncpy(buffer[0], "something", 50);
strncpy(buffer[1], "something else", 50);
}
答案 2 :(得分: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);
}
最后,不要忘记在不再需要时释放所有这些内存。