我一直在调试一个导致分段错误的程序。该错误非常不确定且断断续续,这很烦人。我把范围缩小到strtok()
. 我怀疑是strtok()
在两个不同的线程中调用拆分字符串导致了分段错误。我可以调用strtok()
两个不同的线程吗?
谢谢。
我一直在调试一个导致分段错误的程序。该错误非常不确定且断断续续,这很烦人。我把范围缩小到strtok()
. 我怀疑是strtok()
在两个不同的线程中调用拆分字符串导致了分段错误。我可以调用strtok()
两个不同的线程吗?
谢谢。
strtok()
不是可重入的,因此不应在线程应用程序中使用它,strtok_r()
而是使用它。
strtok()
不是 MT 安全的,因为它全局存储了一些中间变量并在每次调用时重用它们(请参阅每次调用时不必再次传递字符串strtok()
)。您可以查看您正在使用的方法的手册页,并且总是在最后指出它是否是 MT 安全的。
当方法不是 MT 安全(多线程安全或可重入)时,您应该寻找后缀 _r 表示可重入的相同方法。在您的示例中,strtok_r()
正如其他答案中所建议的那样。