19

我一直在调试一个导致分段错误的程序。该错误非常不确定且断断续续,这很烦人。我把范围缩小到strtok(). 我怀疑是strtok()在两个不同的线程中调用拆分字符串导致了分段错误。我可以调用strtok()两个不同的线程吗?

谢谢。

4

2 回答 2

38

strtok()不是可重入的,因此不应在线程应用程序中使用它,strtok_r()而是使用它。

于 2010-10-27T08:07:31.217 回答
6

strtok()不是 MT 安全的,因为它全局存储了一些中间变量并在每次调用时重用它们(请参阅每次调用时不必再次传递字符串strtok())。您可以查看您正在使用的方法的手册页,并且总是在最后指出它是否是 MT 安全的。

当方法不是 MT 安全(多线程安全或可重入)时,您应该寻找后缀 _r 表示可重入的相同方法。在您的示例中,strtok_r()正如其他答案中所建议的那样。

于 2010-10-27T09:07:47.833 回答