我试图在嵌套循环中使用strtok() . 但这并没有给我预期的结果 . 可能是因为他们使用相同的内存位置 . 我的代码形式如下: -
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
}
3 回答
是的,实际上,
strtok()
使用一些静态内存来保存调用之间的上下文 . 如果您使用的是VS(与strtok_r()
相同),请使用strtok()
,strtok_r()
的可重入版本,或strtok_s()
.它有一个额外的上下文参数,您可以在不同的循环中使用不同的上下文 .
strtok正在使用静态缓冲区 . 在你的情况下,你应该使用strtok_r . 此功能使用用户提供的缓冲区 .
WayneAKing在Microsoft开发人员中心发布了an alternative .
引用他:
如果您的环境中没有Microsoft库,则可以选择此选项 .
希望它能帮助别人:)