C 以下代码段中可能存在什么问题?
每当我试图在shell中传递/a.out www.yahoo.com时,下面的代码段就会出现分段错误C 以下代码段中可能存在什么问题?,c,C,每当我试图在shell中传递/a.out www.yahoo.com时,下面的代码段就会出现分段错误 main(int c,char *argv[]) { struct hostent *ptr; ptr = gethostbyname(argv[1]); printf("%s\n", ptr->h_name); } 您确定要将参数传递给应用程序的命令行吗 编辑 您还必须检查gethostbyname()是否不返回NULL。您确定要将参数传递给应用程序
main(int c,char *argv[])
{
struct hostent *ptr;
ptr = gethostbyname(argv[1]);
printf("%s\n", ptr->h_name);
}
您确定要将参数传递给应用程序的命令行吗 编辑
您还必须检查
gethostbyname()
是否不返回NULL。您确定要将参数传递给应用程序的命令行吗
编辑您还必须检查
gethostbyname()
是否不返回NULL。如果返回值(ptr)为NULL,则应检查它(gethostbyname在出错时返回NULL)。当函数返回NULL时,可以检查h_errno以查看到底发生了什么。另见:
在将参数传递给gethostbyname函数之前,还应检查命令行参数的数量:
if(c < 2) {
/* print an error */
return 1;
}
if(c<2){
/*打印错误*/
返回1;
}
如果返回值(ptr)为NULL,则应检查该值(gethostbyname在出现错误时返回NULL)。当函数返回NULL时,可以检查h_errno以查看到底发生了什么。另见:
在将参数传递给gethostbyname函数之前,还应检查命令行参数的数量:
if(c < 2) {
/* print an error */
return 1;
}
if(c<2){
/*打印错误*/
返回1;
}
- 检查是否将两个参数作为命令行参数传递
- 检查
是否返回了有效指针,并根据需要报告问题gethostbyname
/a.out yahoo.com
告诉我们
yahoo.com
EDIT1:
手册上说
gethostbyname*()和gethostbyaddr*()函数已过时。
应用程序应该使用getaddrinfo(3)和getnameinfo(3)
- 检查是否将两个参数作为命令行参数传递
- 检查
是否返回了有效指针,并根据需要报告问题gethostbyname
/a.out yahoo.com
告诉我们
yahoo.com
EDIT1:
手册上说
gethostbyname*()和gethostbyaddr*()函数已过时。
应用程序应该使用getaddrinfo(3)和getnameinfo(3)
@ThiefMaster:他可以随意命名。在一个使用GCC4.5构建(并且运行良好)的Linux系统上(在添加了#include for
netdb.h
、sys/socket.h
和stdio.h
)@DeadMG:True,但是argc
/argv
是事实上的标准。@ThiefMaster:他可以随意命名。在一个使用GCC4.5构建良好(并且运行良好)的Linux系统上(在添加了#include fornetdb.h
、sys/socket.h
和stdio.h
)@DeadMG:True,但是,argc
/argv
是事实上的标准。每当我试图通过/a.out www.yahoo.com在shell…
每当我试图通过/a.out www.yahoo.com在shell…