根据手册页strerror(errnum)
返回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
运行时,我遇到了段错误。
有人可以解释为什么会发生这种情况以及如何解决它(如果可能的话)?
#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;
}
答案 0 :(得分:3)
根据strerror手册页,其包含为#include <string.h>
。
没有函数定义C假设每个函数都返回int,这就是你得到编译器错误的原因。
答案 1 :(得分:3)
您缺少包含<string.h>
标头文件。
编译器甚至会告诉您完全您的问题是什么:
return从没有强制转换的整数中生成指针
如果某个函数没有原型,则假定它返回int
。并且看起来在您的平台上,指向char
的指针不适合int
,因此它被截断,然后printf()
尝试取消引用这样无效的指针。