gpt4 book ai didi

c - 如何处理 strerror_r 函数返回的指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:14 26 4
gpt4 key购买 nike

我在 Linux 中使用 libc 中的 strerror_r 函数。我用 0 作为缓冲区指针和缓冲区大小参数来调用它,它返回一个指向带有错误消息的字符串的指针。

我复制了一个字符串以供将来使用,但是如何处理返回的指针呢?我应该以某种方式释放这个指针,还是指向某个静态消息表?

最佳答案

strerror_r 的(GNU,非 Posix)版本返回的字符串始终是静态字符串或您提供的缓冲区。它几乎总是一个静态字符串;只有当 errno 的值未知时,才会动态创建错误字符串。

如果您将缓冲区大小指定为 0,那么您的缓冲区将永远不会被使用。如果有必要,它仍将被返回,这意味着在您的情况下,您可能会收到 0 作为调用 strerror_r 的结果。这可能不是您想要的。

strerror_r 的 Posix 版本总是使用您提供的缓冲区,并返回 0 除非发生某些错误(用完缓冲区将是一个错误,因此如果您指定在 Posix 版本中将缓冲区设为 0,您肯定会得到一个错误返回,作为副作用,这将破坏 errno 的先前值。

简而言之:

  1. 调用缓冲区长度为 0 的 strerror_r 是不正确的,但如果您使用该函数的 Gnu 特定版本,则绝大多数情况下这无关紧要。

  2. 您不需要复制字符串,除非它是您的缓冲区。使用 strerror_r 的 Posix 兼容版本,不可能知道静态字符串是否可用,因此您最终总是要复制缓冲区。

关于c - 如何处理 strerror_r 函数返回的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19640640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com