繁体   English   中英

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

[英]How to save the remaining string from strtok_r()?

我正在试图弄清楚如何拉出需要解析的重新生成的字符串(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
}

我想你正试图混淆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/

欢迎提出问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM