【发布时间】:2011-12-13 17:23:19
【问题描述】:
我刚刚注意到一个警告(使用 Visual Studio)strtok 不安全,而 strtok_s 不安全。为什么不安全,什么不安全?
我的问题的第一部分已回答here,但不安全的含义是什么,与之相关的问题和可能的问题是什么?
【问题讨论】:
我刚刚注意到一个警告(使用 Visual Studio)strtok 不安全,而 strtok_s 不安全。为什么不安全,什么不安全?
我的问题的第一部分已回答here,但不安全的含义是什么,与之相关的问题和可能的问题是什么?
【问题讨论】:
strtok 不是线程安全的。如果两个或多个线程同时调用 strtok,结果将是未定义的。我在这里复制另一位用户 Jonathan Leffler 的回答:
请注意,strtok() 在处理输入时会破坏其输入。这是 也不是线程安全的,你必须确保没有其他功能 您从解析器调用的函数使用 strtok(),并且没有函数 调用你的解析器使用 strtok()。函数的条件 调用通常不会太繁重;但是,在库代码中,第二个 条件(没有调用函数也使用 strtok())不是 可执行。
对这个问题给出了回复:Dealing with input in C
【讨论】:
strtok,结果是不确定的。原因是strtok“记住”了你上次调用它的字符串,这样当你再次调用它时可以传递一个空指针。 strtok 不可能以线程安全的方式实现。