файл строк в массив в C - PullRequest
       14

файл строк в массив в C

1 голос
/ 06 сентября 2011

У меня есть файл строк, разделенных пробелами, и я хочу получить эти строки в массив определенного типа, но я получаю сообщение об ошибке, говорящее, что fscanf не принимает char **, кто-нибудь знает, как это сделать, пожалуйста?

typedef struct{
      char *string;
      int name;
      } DBZ;

DBZ Table[100];

fp = fopen("text.txt", "r");
if(fp == NULL)
{
    fprintf(stderr, "Error opening file.");
    exit(1);
}
else {
    int i=0;
    while(!feof(fp))
    {
        fscanf(fp,"%s", &Table[i].string);
        i++;
    }
}

Ответы [ 3 ]

2 голосов
/ 06 сентября 2011

& Таблица [I] .String

Вы берете адрес указателя, который является указателем-указателем, который является символом **

Также

fscanf не предоставляет никаких функций для выделения необходимой памяти. Вам придется распределить блоки по размеру, достаточно большому, чтобы вместить то, что находится в вашем файле. Затем вы захотите использовать что-то более безопасное, чем fscanf, предпочтительно самая безопасная вещь из доступных *, чтобы вы не перезаписывали буфер.

else {
    int i=0;
    while(!feof(fp))
    {
        Table[i].string = malloc(100);
        fscanf_s(fp,"%s", Table[i].string, 100);
        i++;
    }
}

* Это расширения Microsoft, у вашей платформы может быть что-то другое.

0 голосов
/ 06 сентября 2011

Вам нужно выделить место для char *string в вашей структуре.И ваш% s берет символ * не символ **

0 голосов
/ 06 сентября 2011

Удалить строку &, таблица [i]. Уже является указателем.

строка также должна содержать память.Вы можете изменить определение вашей структуры на:

typedef struct{
      char string[90];
      int name;
} DBZ;

Это предполагает, что ваши данные уместятся в 90 байтов.В зависимости от ваших данных, это также может быть очень неэффективным способом их хранения.malloc(), как уже отмечали другие, может помочь вам здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...