department_id
- это точно такой же блок памяти. Для каждого ввода (каждой итерации) вы пишете по тому же адресу памяти, эффективно перезаписывая предыдущий контент. Итак, в конце все, что у вас есть, это последнее слово, которое вы ввели. Обратите внимание, что passer
будет содержать эквивалентные элементы (указатель тот же).
Чтобы исправить это, вам нужно выделить память отдельно для каждой строки. Примерно так:
for(i = 0; i < department_quantity; i++) {
// ...
department_id = malloc(8); // here
scanf("%s", department_id);
passer[i] = department_id; // now passer[i] is a different pointer each time
}
Или вы можете угробить department_id
и go для char passer[8][8]
, который не выделяет динамическую c память, а затем просто scanf("%s", passer[i]);
.
PS Использование scanf
таким способом довольно опасно, поскольку ничто не мешает вам вводить строку, которая слишком велика для размещения в выделенной памяти. Обычный подход был бы fgets(passer[i], 8, stdin)
, где passer
- это char passer[8][8]
- примечание 8
дается в качестве размера буфера.