gpt4 book ai didi

c++ - 当我在测试期间手动设置 errno 时,strerror_r 返回垃圾

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:15 24 4
gpt4 key购买 nike

在测试期间,我有一个模拟对象,它设置了 errno = ETIMEDOUT; 我正在测试的对象看到错误并调用 strerror_r取回错误字符串:

if (ret) {
if (ret == EAI_SYSTEM) {
char err[128];
strerror_r(errno, err, 128);
err_string.assign(err);
} else {
err_string.assign(gai_strerror(ret));
}
return ret;
}

我不明白为什么 strerror_r 返回垃圾。我什至试过打电话

strerror_r(ETIMEDOUT, err, 128)

直接但仍然有垃圾。我肯定错过了什么。看来我得到的是函数的 gnu 版本而不是 posix 版本,但在这种情况下应该没有任何区别。

编辑

我在 Ubuntu 8.04 上。 glibc 版本在 features.h 中看起来像 2.7。

最佳答案

根据此页面,http://linux.die.net/man/3/strerror_r ,如果您使用的是 strerror_r() 的 GNU 版本,该函数可能决定不将任何内容存储到您提供的缓冲区中;您需要使用从函数返回的字符串(似乎是一个相当奇怪的接口(interface)):

The GNU-specific strerror_r() returns a pointer to a string containing the error message. This may be either a pointer to a string that the function stores in buf, or a pointer to some (immutable) static string (in which case buf is unused). If the function stores a string in buf, then at most buflen bytes are stored (the string may be truncated if buflen is too small) and the string always includes a terminating null byte.

因此,如果您碰巧使用的是 GNU 版本,则不能依赖 err 缓冲区将任何有用的东西放入其中,除非 strerror_r() 返回err 的地址。

关于c++ - 当我在测试期间手动设置 errno 时,strerror_r 返回垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3051204/

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