Я изучаю C, и я играю со структурами, но я нашел какое-то поведение, которое я не могу объяснить, и я хотел бы знать, почему это происходит.Массив структур внутри цикла
Это мой код:
struct my_struct{
char *name;
};
int main()
{
struct my_struct arr[3];
int i = 0;
char str[10];
while (i<3)
{
fgets(str, 10, stdin);
arr[i].name = str;
printf("Array number %d: %s", i, arr[i].name);
i++;
}
printf("1 - %s\n2 - %s\n3 - %s", arr[0].name, arr[1].name, arr[2].name);
return 0;
}
Мой вход:
test1
test2
test3
Ожидаемый результат:
Array number 0: test1
Array number 1: test2
Array number 2: test3
1 - test1
2 - test2
3 - test3
Результирующий выход:
Array number 0: test1
Array number 1: test2
Array number 2: test3
1 - test3
2 - test3
3 - test3
Результат:
Проблема в том, что цикл while продолжает работать, кажется, все в порядке; однако, когда он выходит, он, кажется, устанавливает каждое из значений «name» структур в массиве последним.
Если один из циклов и до последнего printf(), я устанавливаю имя последней структуры в массиве вручную, это единственное, которое обновляется, но имена предыдущих структур все еще заданы до последнего, введенного внутри цикла.
Я предполагаю, что мне не хватает информации об управлении памятью, как очистка буфера, прежде чем звонить в fgets() снова или STH, но не может понять, что происходит. Кто-нибудь знает, что это значит?
Это было ясно, черт возьми, спасибо много[email protected] – Nico
@Nico Нет проблем, чтобы сделать этот хороший вопрос о жизни, вы можете добавить строку ввода и сегмент отступов, показывающий ваш ожидаемый результат и то, что вы на самом деле получили. Таким образом, он станет более ясным для будущих читателей. –
Теперь все готово! @Ben – Nico