Как сохранить оставшуюся строку из strtok_r ()? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь выяснить, как вытащить оставшуюся строку, которую нужно проанализировать (третий параметр strtok_r ()), но я не знаю, как это сделать.Первоначальный ввод поступает от указателя на символ, определяемого функцией malloc ().

Ниже приведен код, которого я пытаюсь достичь.

num = strtok_r(raw_in, delim, &rest_of_nums);

while(rest_of_nums != NULL){

    while(num != NULL){

    //Compare num with fist digit of rest_of_nums
    num = strtok_r(NULL, delim, &rest_of_nums);

    }
    //Iterate to compare num to second digit of rest_of_nums
}

1 Ответ

0 голосов
/ 25 июня 2019

Я думаю, вы пытаетесь смешать strtok() и strtok_r().Синтаксис strtok() выглядит следующим образом:

char * strtok ( char * str, const char * delimiters );

, а синтаксис strtok_r() выглядит следующим образом:

char * strtok_r ( char * str, const char * delimiters, char **saveptr );

Когда мы вызываем strtok() в первый раз,функция ожидает строку C в качестве аргумента для str, чей первый символ используется в качестве начального местоположения для сканирования токенов.При последующих вызовах функция ожидает нулевой указатель и использует позицию сразу после конца последнего токена в качестве нового начального местоположения для сканирования.Точка, в которой был найден последний токен, внутренне сохраняется функцией, которая будет использоваться при следующем вызове.

Однако в strtok_r() третий аргумент saveptr является указателем на переменную char *это используется внутренне strtok_r() для поддержания контекста между последовательными вызовами, которые анализируют одну и ту же строку.

Пример для strtok_r() выглядит следующим образом:

    char str[] = "sample strtok_r example gcc stack overflow";
    char * token;
    char * raw_in = str;
    char * saveptr;
    //delimiter is blank space in this example
    token = strtok_r(raw_in, " ", &saveptr);
    while (token != NULL) {
        printf("%s\n", token);
        printf("%s\n", saveptr);
        token = strtok_r(NULL, " ", &saveptr);
    }

Выходные данныедолжно быть следующим:

sample
strtok_r example gcc stack overflow
strtok_r
example gcc stack overflow
example
gcc stack overflow
gcc
stack overflow
stack
overflow
overflow

Источник:

http://www.cplusplus.com/reference/cstring/strtok/

https://www.geeksforgeeks.org/strtok-strtok_r-functions-c-examples/

Вопросы приветствуются.

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