根据手册页,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运行它时,我得到了一个段错误。
谁能解释一下为什么会发生这种情况,以及如何修复它(如果可能)?
temp.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;
}发布于 2013-06-19 00:26:56
您缺少<string.h>头文件的包含。
Documentation.
编译器甚至会告诉你你的问题到底是什么:
返回使指针从整数开始,而不进行强制转换
如果函数没有原型,则假定返回int。在您的平台上,指向char的指针似乎不适合int,因此它被截断,然后printf()尝试取消对该无效指针的引用。
发布于 2013-06-19 00:26:39
根据strerror手册页,它包含的是#include <string.h>。
如果没有函数定义,C会假设每个函数都返回int,这就是为什么你会得到编译器错误的原因。
https://stackoverflow.com/questions/17174081
复制相似问题