Чтение из файла в динамически размещенный массив строк - PullRequest
1 голос
/ 22 сентября 2019

Вот мой код.Мой массив просто не заполняется.Проблема происходит с fscanf.Я знаю, что он отлично читает символы, потому что я пытался прочитать их в общий символ / указатель на строку, и он отлично читает.Просто не знаю, как скопировать символы в сложный массив.Указатель на указатель: O Формат текстового файла может быть примерно таким: *

Alice
Bob
Jerry
Ted

Мой код:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int lineCount = 1;
    char* fileInput;
    char c[100];

    int allocatedBytes = 0;

    fileInput = (char*)malloc(100*sizeof(char));
    printf("File name: ");
    gets(fileInput);

    FILE * fptr;

    if ((fptr = fopen(fileInput, "r")) == NULL)
    {
        printf("Error! opening file");
        // Program exits if file pointer returns NULL.
        exit(1);
    }

    //get number of names before dynamic array allocation
    for(char c = getc(fptr); c!= EOF; c=getc(fptr))
        if(c == '\n')
            lineCount = lineCount + 1;

    char **names = malloc(lineCount * sizeof(char *));

    for(int i=0; i<lineCount; i++)
        names[i] = (char *)malloc(100);

    int i=0;
    while((fscanf(fptr, "%99s", names[i]))!=EOF)
        i++;

    for(int i=0; i<lineCount; i++)
        printf("%s\n", names[i]);
}

1 Ответ

0 голосов
/ 22 сентября 2019

Указатель файла (fptr), используемый в fgetc, также используется для fscanf.fget мог изменить значение структуры указателя файла (fptr), например, положение чтения и положение записи.Попробуйте использовать другой указатель файла для fscanf.В этом коде вместо fgetc.s используется getc, поэтому убедитесь также.

...