【问题标题】:What is the meaning of unsafe in C++? [duplicate]C++中不安全的含义是什么? [复制]
【发布时间】:2011-12-13 17:23:19
【问题描述】:

可能重复:
Why is strtok() Considered Unsafe?

我刚刚注意到一个警告(使用 Visual Studio)strtok 不安全,而 strtok_s 不安全。为什么不安全,什么不安全?

我的问题的第一部分已回答here,但不安全的含义是什么,与之相关的问题和可能的问题是什么?

【问题讨论】:

    标签: c++ strtok


    【解决方案1】:

    strtok 不是线程安全的。如果两个或多个线程同时调用 strtok,结果将是未定义的。我在这里复制另一位用户 Jonathan Leffler 的回答:

    请注意,strtok() 在处理输入时会破坏​​其输入。这是 也不是线程安全的,你必须确保没有其他功能 您从解析器调用的函数使用 strtok(),并且没有函数 调用你的解析器使用 strtok()。函数的条件 调用通常不会太繁重;但是,在库代码中,第二个 条件(没有调用函数也使用 strtok())不是 可执行。

    对这个问题给出了回复:Dealing with input in C

    【讨论】:

    • 更糟糕的是,如果两个或多个线程同时在不同的字符串上调用strtok,结果是不确定的。原因是strtok“记住”了你上次调用它的字符串,这样当你再次调用它时可以传递一个空指针。 strtok 不可能以线程安全的方式实现。
    • @Steve Jessop:谢谢,我编辑删除了“相同”部分。
    猜你喜欢
    • 2014-03-18
    • 2015-07-14
    • 1970-01-01
    • 2014-06-12
    • 2013-06-28
    • 2019-02-07
    • 2013-12-31
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多