Fscanf внутри цикла - PullRequest
       0

Fscanf внутри цикла

0 голосов
/ 24 марта 2011

Ах, спасибо! Имеет смысл. Только что сделанная команда размером MAX_COMMAND_LENGTH + 1.

Я пытаюсь использовать fscanf для чтения одного и того же файла 2 раза в цикле, но получаю ошибку seg. Идея состоит в том, что файл будет отформатирован таким образом, чтобы в начале каждой строки содержалась команда с последующими аргументами для команды.

  char* command;  //Changed to char command[MAX_COMMAND_LENGTH + 1]

  while(fscanf(file, "%s", command) == 1)
  {
    if (strcmp("CMD1", command) == 0)
    {    
      int index, exp, coeff;
      fscanf(file, "%d %d %d", &index, &exp, &coeff);
    }
    else if (strcmp("CMD2", command) == 0)
    {
      int num;
      fscanf(file, "%d", &num);
    }
}

Ответы [ 4 ]

3 голосов
/ 24 марта 2011

Вам необходимо выделить память для command. Например:

command = (char *)malloc(1024 * sizeof(char));

выделит достаточно памяти для 1024 символов.

Не забудьте free(command), когда закончите с этим.

0 голосов
/ 24 марта 2011

Вы должны выделить буфер для чтения команды. В настоящее время command не инициализируется и указывает на сумму неверного адреса. Так что либо вы «malloc ()» памяти для команды или объявить команду в виде массива (char command[whateversizeyouneed])

0 голосов
/ 24 марта 2011

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

char command[256];

if (fscanf(file "%256s", command)==1)
    // ...
0 голосов
/ 24 марта 2011

Вам необходимо выделить некоторое хранилище и сохранить его в «команде». Вы просите fscanf написать через неинициализированный указатель.

...