考虑使用的strtok分割字符串madddy下面的代码片段。试图了解的strtok
char* str = (char*) malloc(sizeof("Madddy"));
strcpy(str,"Madddy");
char* tmp = strtok(str,"d");
std::cout<<tmp;
do
{
std::cout<<tmp;
tmp=strtok(NULL, "dddy");
}while(tmp!=NULL);
它工作正常,输出是马。但通过修改strtok到以下,
tmp=strtok(NULL, "ay");
输出变成Madd。那么,strtok究竟是如何工作的?我有这个问题,因为我预料的strtok把每一个那就是在分隔符字符串被视为一个分隔符。但在某些情况下,它正在这样做,但在少数情况下,它会带来意想不到的结果。有谁能帮我理解这一点吗?
老实说,我认为这样做的正确方法是完全停止使用`strtok`。这是一个难以使用,难以调试的功能,根本没有线程安全保证。你最好使用`string :: find`和`string :: substr`的组合来完成解析。 – templatetypedef 2011-01-14 02:31:54
或`boost :: token_iterator` – 2011-01-14 02:42:30
我愿意重复这个重要性和重点,尤其是因为您使用的是C++而不是C。另外,您可能需要查看boost :: tokenize。 – 2011-01-14 02:42:57