1

2 つの char ポインターを取得しました。

char *a="A";
char *b="B";

そしてポインタバッファへのポインタ:

char **buf = malloc(sizeof(char*)*2);

そして、memcpy を使用して 2 つの変数を buf にコピーします。

memcpy(*buf, &a, sizeof(char*));
memcpy(*buf, &b, sizeof(char*));

しかし、それは最初の変数を置き換えます..

どうすれば2つコピーできますか?

4

2 に答える 2

1

あなたが本当にやりたいことは何ですか?

char **buf = malloc(sizeof(char*)*2);

memcpy(*buf, &a, sizeof(char*));
memcpy(*buf, &b, sizeof(char*));

間に初期化を省略しない限り、未定義の動作が発生します。malloced メモリの内容は指定されていないため、 when がin*bufとして解釈される場合、ほぼ確実に有効なポインターが生成されず、null ポインターである可能性は無視できません。void*memcpy

buf2 つのポインターを含めるだけの場合は、malloc

buf[0] = a;
buf[1] = b;

は最も単純でクリーンなソリューションですが、

memcpy(buf, &a, sizeof a);
memcpy(buf + 1, &b sizeof b);

も有効です (&buf[1]の代わりにbuf + 1.

a文字列を連結してbポイントしたい場合は、完全に間違ったアプローチに従っています。結果(0ターミネータを含む)を保持するのに十分な大きさの領域を指す必要がありchar*、最も簡単な方法はstrcat.

于 2012-10-13T12:20:23.513 に答える
0

私は自分のテストコードであなたのプログラムを試しました:これが役に立てば幸いです:

#define MAX_LENGTH 10
#define ARRAY_LENGTH 2
int main(int argc, char *argv[])
{
    char *a = "A";
    char *b = "B";
    char **buf = (char **)malloc(sizeof(char*)*ARRAY_LENGTH);
    *buf = (char *)malloc(sizeof(char) * MAX_LENGTH);
    *(buf+1) = (char *)malloc(sizeof(char) * MAX_LENGTH);
    memset(buf[0],0,10);
    memset(buf[1],0,10);
    memcpy(buf[0],a,strlen(a));
    memcpy(buf[1],b,strlen(b));
    printf("%s %s",buf[0],buf[1]);
    free(buf[0]);
    free(buf[1]);
        free(buf)
    return 0;
}
于 2012-10-13T11:59:59.323 に答える