Необходимо использовать malloc или calloc для выделения памяти для данных из сохраняемого текстового файла и для проверки данных в файле

Создал структуру, которая показана ниже:

struct entry
{
    int source[5];
    int destination[5];
    int type[5];
    int port;
    int data;
} record;

Пользователь должен ввести имя файла, и файлы должны быть проверены по определенным критериям и затем сохранены, но я не уверен, как использовать функции malloc или calloc в моем коде, чтобы позволить мне сделать это. Также нужна помощь с тем, как проверить текстовый файл. Фрагмент кода показан ниже:

int file()
{   
    FILE *inFile;
    char inFileName[70]= {'\0'};
    char data1[70];
    char *token;

    int x = 0;
    int count = 0;
    int length = 0;

    printf("Enter File Name:");
    scanf("%s", inFileName);

    if ((inFile = fopen(inFileName, "r"))== NULL)
    {
        printf("Open failed:%s\n", inFileName);
        exit(1);
    }

    if (inFile != NULL)
    {
        while (!feof (inFile)) // Read the whole file until the end of the file.
        {
            count ++;
            printf("\n\nRecord:%i\n", count);
            fgets(data1, sizeof data1, inFile); //fgets reads the first string from the "inFile"        pointer and stores it in char "data" using the "sizeof" function to make sure strings are the same size.

            token = strtok(data1, ":"); // the "token" pointer used with the "strtok" function to break down the "data" string into smaller tokens by using the delimiter ":"
            record.source[5] = token;
            printf("Source:%d\n", record.source);

1 ответ

Вы можете использовать это, чтобы получить размер файла:

Как вы определяете размер файла в C?

а затем сделать malloc этого размера.

off_t size = fsize(inFileName);
char *data = malloc((size + 1) * sizeof(char));
off_t offset = 0;

и после fgets сохраните данные следующим образом:

fgets(data1, sizeof data1, inFile);
strcpy(data + offset, data1);
offset += strlen(data1);
Другие вопросы по тегам