あなたが本当にやりたいことは何ですか?
と
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.