Разбор строки, чистый C - PullRequest
0 голосов
/ 06 октября 2018

У меня динамически размещенный массив с допустимыми токенами.После каждого токена пользователь должен написать число, которое будет использоваться для определения значения переменной [$ program --token=99];как разобрать этот последний номер?

Вот код:

/* libs */

#define TOKENS_QT 5
#define TOKEN_SIZE 6

static uint8_t GRID_WIDTH;

int main (const int argc, const char* argv[]) {
  if (strncmp(argv[1], "--help", 6)) {
    /* Here is some info about usage. */
    return 0;
  } else if (strncmp(argv[1], "--std", 5)) {
    /* Here is standard set up. */
  } else if (argc == TOKENS_QT + 1) {
    char** tokens = malloc(TOKENS_QT * TOKEN_SIZE);
    tokens = (char* [TOKENS_QT]) { "--sgw=", "--sgh=", "--sdq=", 
                                   "--shq=", "--soq=" };

    for (register uint8_t i = 0; i < TOKENS_QT; ++i) {
      if (strncmp(argv[i + 1], tokens[i], 6)) {
        switch(i) {
          case 0: // --sgw=
            /* some cool actions to parse --sgw=99, for example, into 99 */
            /* some actions to check validity of given number */
            GRID_WIDTH = 99;
            break;
          /* There are other tokens handling. */
        }
      }
    }

    free(tokens);
  } else {
    /* Here is again info about correct usage. */
    return 0;
  }

  return 0;
}

1 Ответ

0 голосов
/ 06 октября 2018

Вы можете использовать sscanf() для его анализа.

sscanf(argv[i + 1], "--sgw=%d", &GRID_WIDTH);

Если вы не хотите помещать --sgw= в строку формата, вы можете сделать:

sscanf(argv[i+1]+6, "%d", &GRID_WIDTH);

Добавление 6 пропускает префикс --sgw= в аргументе.

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