[英]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.