我试图弄清楚如何提取需要解析的剩余字符串(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
}
答案 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/
欢迎提问。