如何从strtok_r()保存剩余的字符串?

时间:2019-06-25 00:22:48

标签: c pointers

我试图弄清楚如何提取需要解析的剩余字符串(strtok_r()的第三个参数),但是却不知道该怎么做。 初始输入来自malloc()定义的char指针。

下面的代码是我想要实现的。

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 :(得分:0)

我认为您正在尝试混用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/

欢迎提问。