У вас есть только один bin
. То, что делает ваш hexToBin
, добавляет к этому bin
, а затем возвращает bin
. Другими словами, когда вы вызываете его несколько раз, результатом всегда будет один и тот же указатель, потому что вы всегда return bin;
.
Итак, если вы сделаете это:
b[i] = hexToBin(a[i]);
Затем, в конце концов, все элементы b
указывают на bin
, поэтому вы получаете одинаковый вывод при их печати. Если вы сделаете это вместо:
b[i] = strdup(hexToBin(a[i]));
Тогда результат не тот, потому что все они не получают bin
, а копию того, что было bin
в то время. Вот почему результаты разные. Таким образом, b[0]
указывает на одну копию, затем к ней добавляется bin
, но это не меняет копию b[0]
.
Если вы используете strdup
, не забудьте освободить выделенную память:
for(int i = 0; i < 3; i++) {
free(b[i]);
}