I can not figure out what the heck is happening here. What I expect is that the output should say that there is only 1 element in keys, it's saying there are 7 when I have allocated only the 0 position with 120 bytes.
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;
}
outputs: hithere\one\two\three 0 1 2 3 4 5 6 7 hithere\one\two\three 0 1 2 3 4 5 6 7
the strings are as I expect them to be however i thought only 0 should be printed out after since 0 is the only element I added to. I need to be able to free each spot instead of just free[0] but when i put the free[i] in the for loop that prints out i it stack dumps.
with regard to initialization from response below, if i need an array that is like 1000 instead of 2 then how do i init them all to 0 without typing out 1,000 0's