ここで一体何が起こっているのか理解できません。私が期待しているのは、出力にはキーに1つの要素しかないということです。つまり、120バイトで0の位置だけを割り当てた場合、7つの要素があるということです。
void add2(char **b, char *i) {
if (!i) {
b[0] = (char*) malloc(120);
sprintf(b[0], "%s", "hithere");
} else {
strcat(b[0], "\\\\");
strcat(b[0], i);
}
}
void add1(char **b) {
add2(b, NULL);
add2(b, "one");
add2(b, "two");
add2(b, "three");
}
void add() {
char *keys[2];
int i;
add1(keys);
fprintf(stderr, "%s\n", keys[0]);
for (i = 0; keys[i]; i++)
fprintf(stderr, "%d\n", i);
free(keys[0]);
}
int main (int argc, char** argv)
{
add();
add();
return 255;
}
出力:hithere \ one \ two \ three 0 1 2 3 4 5 6 7 hithere \ one \ two \ three 0 1 2 3 4 5 6 7
文字列は私が期待するとおりですが、追加した要素は0だけなので、後には0だけを出力する必要があると思いました。free [0]だけでなく、各スポットを解放できるようにする必要がありますが、free [i]を出力するforループに入れると、スタックダンプが発生します。
以下の応答からの初期化に関して、2ではなく1000のような配列が必要な場合、1,000個の0を入力せずにすべてを0に初期化するにはどうすればよいですか。