sscanf не будет захватывать совпадение второй строки - PullRequest
0 голосов
/ 27 ноября 2018

Я кодировал небольшую вещь на C и столкнулся с проблемой:

Я пытаюсь проанализировать файл, который содержит строки, отформатированные так:

name: description text: 42
name 2: description text2: 75

ИтакЧитая каждую строку, я передаю их в scanf следующим образом:

uint8_t buffer [512]={0};
uint8_t name[32]={0};
uint8_t desc[32]={0};
uint8_t chances;

[...]

scanres = sscanf( buffer, "%31[0-9a-zA-Z ]:%31[0-9a-zA-Z ]:%d", name, desc, &num );

Но даже если scanres равен "3" (правильное поведение);"desc" все еще печатается как "" (пустая строка)

Может кто-нибудь помочь мне с этим?Что я делаю не так?

[ПРАВИТЬ] Вот код в ситуации:

  #define TINY_STRING_SIZE 32
// [...]
  FILE *conffp;
  uint8_t i=0;
  uint8_t scanres = 0;

  uint8_t buffer [512]={0};
  uint8_t name[TINY_STRING_SIZE]={0};
  uint8_t desc[TINY_STRING_SIZE]={0};
  uint8_t chances;

  if ((conffp = fopen(filename,"r+")) == NULL)
  {
     exit(0);
  }

  while ( fgets( buffer, sizeof buffer, conffp ) != NULL ) {
    printf("[>] %s", buffer);
    scanres = sscanf( buffer, "%31[0-9a-zA-Z ]:%31[0-9a-zA-Z ]:%d", name, desc, &chances );
    if ( scanres == 3 ) {
      printf("[+] id:%d desc:%s\tname:\"%s\"\tchances:%d)\n", i, desc, name, chances);
      //looter_grab(looter, i, desc, name, chances);
      i++;
    }
    else
    {
      printf("ERR: scanf got: %d \n",scanres);
    }
  }
  fclose (conffp);

спасибо, Ларзук

...