strtok () игнорирует 0 значений, если первая часть строки равна 0 - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующий код, который берет строковый параметр из командной строки и должен, во-первых, разделить его на две отдельные строки и, во-вторых, преобразовать каждую из них в целочисленные значения:

int numOne = 0, numTwo = 0;
char *tmp, *end;

tmp = strtok(argv[1], ":");
numOne = strtol(tmp, &end, 10);
if (errno == ERANGE) {
    printf("range error\n");
    break;
}
while (tmp != NULL) {
    numTwo = strtol(tmp, &end, 10);
    if (errno == ERANGE) {
        printf("range error\n");
        break;
    }
    tmp = strtok(NULL, argv[1]);
}

Проблема в том, что этот код работает нормально, если параметр CL выглядит как «1: 500».Однако, если это «0: 500», значения, сохраненные в numOne и numTwo, равны 0 и 5 соответственно.Если первое значение равно 0, strtok () впоследствии игнорирует любые 0-значения, и я никогда не получаю значения, такие как 50, 500, 5000 и т. Д. В numTwo.

Пожалуйста, помогите мне понять, почему это так, икак это исправить.Спасибо!

1 Ответ

0 голосов
/ 05 июня 2018

Эта строка:

tmp = strtok(NULL, argv[1]);

, вероятно, должна быть:

tmp = strtok(NULL, ":");

В настоящее время вы передаете исходную строку сокращенную строку, созданную первым вызовомstrtok в качестве разделителя.

...