2

重複の可能性:
C および C++ で多次元配列を関数に渡す方法

だから私はチャーを持っていますbuffer[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、配列にフォールバックする特定の理由がある場合は、(既に行っているように) ポインターを使用し、次元を明示的に渡すことが 1 つの方法です。

于 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 を 2 つだけ使用して、より巧妙なポインターを使用することもできます。

#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 に答える