Stack Overflow на русском Asked on November 17, 2021
При отладке, код в самом конце выдаёт такую ошибку(скрин). Пытался гуглить, вроде похоже на утечку памяти, но как исправить не пойму. Спасибо.
struct person {
char lastName[15];
char firstName[15];
char age[2];
};
int main()
{
FILE* filePtr;
filePtr = fopen("nameage.txt", "wb");
if (filePtr == NULL)
fprintf(stderr, "File couldn't open.");
else
{
struct person blankPerson = { "unassigned", "", "0" };
for (int i = 0; i < 100; i++)
fwrite(&blankPerson, sizeof(struct person), 1, filePtr);
struct person person;
puts("Enter LastName, FirstName, Age.");
puts("Enter EOF to stop.");
printf("?t");
scanf("%s%s%s", &person.lastName, &person.firstName, person.age);
int start = 1;
while (!feof(stdin))
{
fwrite(&person, sizeof(struct person), 1, filePtr);
printf("?t");
scanf("%s%s%s", &person.lastName, &person.firstName, person.age);
}
rewind(filePtr);
fclose(filePtr);
}
return 0;
}
В тексте программы - классические ошибки.
scanf("%s%s%s", &person.lastName, &person.firstName, person.age);
%s требует указателя, а ему подсовывают адрес указателя. Самое интересное, что age вводится правильно. Удалите эти амперсанды.
Также вызывает большой вопрос объявление age как char[2]. Таким образом можно будет ввести возраст только от 0 до 9 - завершающий ноль то нужен.
struct person person; - это нормальная сишная штука.
Answered by KoVadim on November 17, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP