TransWikia.com

Непонятная ошибка C

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;
}

One Answer

В тексте программы - классические ошибки.

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP