1

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

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

有人可以解释为什么会发生这种情况以及如何解决它(如果可能的话)?

温度.c

#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;
}
4

2 回答 2

4

根据 strerror 联机帮助页,它的包含是#include <string.h>.

如果没有函数定义,C 会假定每个函数都返回 int,这就是您收到编译器错误的原因。

于 2013-06-18T16:26:38.750 回答
4

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

文档。

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

return 从整数中生成指针而不进行强制转换

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

于 2013-06-18T16:26:56.267 回答