在C循环中使用strtok()?
我想在嵌套循环中使用strtok()。 但是这并没有给我想要的结果。 可能是因为他们正在使用相同的内存位置。 我的代码是这样的forms:
char *token1 = strtok(Str1, "%"); while(token1 != NULL ) { char *token2 = strtok(Str2, "%"); while(token2 != NULL ) { //DO SMTHING token2 = strtok(NULL, "%"); } token1 = strtok(NULL, "%"); // Do something more }
是的, strtok()
确实使用了一些静态内存来保存调用之间的上下文。 如果使用VS(与strtok_r()
相同strtok_s()
,则使用strtok()
, strtok_r()
的可重入版本,或使用strtok_r()
)。
它有一个额外的上下文参数,您可以在不同的循环中使用不同的上下文。
char *tok, *saved; for (tok = strtok_r(str, "%", &saved); tok; tok = strtok_r(NULL, "%", &saved)) { /* Do something with "tok" */ }
strtok正在使用一个静态缓冲区。 在你的情况下,你应该使用strtok_r。 该function使用用户提供的缓冲区。
WayneAKing在微软开发者中心发布了一个替代scheme 。
引用他:
到这里
并下载这个文件
Stptok.C改进的标记function
您也可以从同一个站点下载所需的头文件。
这是strtok的一个修改版本,它将parsing的标记(子string)放在一个单独的缓冲区中。 您应该能够修改它以适应您的需求。
- 韦恩
PS – 请注意,这些文件可能是相对于行尾的* nix格式。 即 – 0x0A而不是0x0D 0x0A
如果您的环境中没有Microsoft库,则可以select这种方法。
希望它能帮助别人:)