在C中的循环中使用strtok()?

我试图在嵌套循环中使用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

 }


绝地无双
浏览 502回答 3
3回答

qq_遁去的一_1

是的,strtok()的确确实使用了一些静态内存来保存两次调用之间的上下文。使用的重入版本strtok(),strtok_r()而不是,或者strtok_s()如果你正在使用VS(相同strtok_r())。它有一个附加的上下文参数,您可以在不同的循环中使用不同的上下文。char *tok, *saved;for (tok = strtok_r(str, "%", &saved); tok; tok = strtok_r(NULL, "%", &saved)){    /* Do something with "tok" */}

犯罪嫌疑人X

strtok使用的是静态缓冲区。在您的情况下,您应该使用strtok_r。此功能正在使用用户提供的缓冲区。
打开App,查看更多内容
随时随地看视频慕课网APP