要安全地跳过strtok
的空终止符,可以使用strspn
函数来计算跳过的空终止符的数量,并在循环中进行相应的跳过。
下面是一个示例代码:
#include
#include
int main() {
char str[] = "Hello, World!";
char delimiters[] = " ,!";
char* token = strtok(str, delimiters);
size_t emptyCount = strspn(token, "");
size_t tokenLength = strlen(token) - emptyCount;
while (token != NULL) {
printf("Token: %.*s\n", (int)tokenLength, token);
token = strtok(NULL, delimiters);
if (token != NULL) {
emptyCount = strspn(token, "");
tokenLength = strlen(token) - emptyCount;
}
}
return 0;
}
在这个示例中,str
是输入字符串,delimiters
是分隔符字符串。我们首先通过调用strtok
函数来获取第一个标记。然后,使用strspn
函数计算token
字符串中的空终止符数量。通过strlen
函数计算token
的长度,并减去空终止符的数量,得到实际的标记长度。
在循环中,我们打印当前的标记,并继续调用strtok
函数来获取下一个标记。在获取到下一个标记后,我们重复上述步骤,计算空终止符数量并更新标记长度。
请注意,strtok
函数是不可重入的,因此在多线程环境中使用时要小心。