首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strerror_r不起作用

strerror_r不起作用
EN

Stack Overflow用户
提问于 2013-05-05 20:23:51
回答 1查看 1.3K关注 0票数 5

这里有一个简单的程序来说明这个问题。

代码语言:javascript
复制
#include <string.h>
#include <iostream>

int main () {
    char buf [30];
    strerror_r (0, buf, sizeof (buf));

    std :: cout << "strerror_r(0): " << buf << std :: endl;
    std :: cout << "strerror(0): " << strerror (0) << std :: endl;
}

以下是输出。

代码语言:javascript
复制
strerror_r(0): 
strerror(0): Success

为什么buf中什么都没有?

(由gcc在Ubuntu上编译)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-05 20:34:30

来自man strerror_r

如果满足以下条件,则提供strerror_r()的XSI兼容版本:(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) &&!_GNU_SOURCE 否则,提供特定于_XOPEN_SOURCE的版本。

再往下:

特定于GNU的strerror_r()返回一个指向包含错误消息的字符串的指针。这可以是指向函数存储在buf中的字符串的指针,也可以是指向某个(不可变)静态字符串的指针(在这种情况下,buf是未使用的)。如果函数将字符串存储在buf中,则最多只能存储buflen字节(如果buflen太小且errnum未知,则字符串可能会被截断)。该字符串始终包含一个终止空字节。

该程序必须使用特定于GNU的版本,而不是填充buf。我复制了发布的程序的行为,但存储了strerror_r()的返回值,并且它与buf的地址不同。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16384484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档