首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能返回strerror()的结果

为什么不能返回strerror()的结果
EN

Stack Overflow用户
提问于 2013-06-19 00:23:33
回答 2查看 1.3K关注 0票数 1

根据手册页,strerror(errnum)返回一个char *,但我得到以下警告:

代码语言:javascript
复制
gcc temp.c -o temp
temp.c: In function ‘mystrerror’:
temp.c:10:4: warning: return makes pointer from integer without a cast [enabled by default]

当我使用./temp 0而不是./temp 256运行它时,我得到了一个段错误。

谁能解释一下为什么会发生这种情况,以及如何修复它(如果可能)?

temp.c

代码语言:javascript
复制
#include <stdio.h>
#include <errno.h>

char *mystrerror(int errnum)
{
    switch (errnum) {
    case 256:
        return "My test";
    default:
        return strerror(errnum);
    }
}

int main(int argc, char **argv)
{
    int err;

    if (argc > 1) {
        err = atoi(argv[1]);
        printf("test error (%d) %s\n", err, mystrerror(err));
    }

    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-19 00:26:56

您缺少<string.h>头文件的包含。

Documentation.

编译器甚至会告诉你你的问题到底是什么:

返回使指针从整数开始,而不进行强制转换

如果函数没有原型,则假定返回int。在您的平台上,指向char的指针似乎不适合int,因此它被截断,然后printf()尝试取消对该无效指针的引用。

票数 4
EN

Stack Overflow用户

发布于 2013-06-19 00:26:39

根据strerror手册页,它包含的是#include <string.h>

如果没有函数定义,C会假设每个函数都返回int,这就是为什么你会得到编译器错误的原因。

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

https://stackoverflow.com/questions/17174081

复制
相关文章

相似问题

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