C 以下代码段中可能存在什么问题?

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。您确定要将参数传递给应用程序

每当我试图在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。

您确定要将参数传递给应用程序的命令行吗

编辑

您还必须检查
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 for
netdb.h
sys/socket.h
stdio.h
)@DeadMG:True,但是,
argc
/
argv
是事实上的标准。
每当我试图通过/a.out www.yahoo.com在shell…
每当我试图通过/a.out www.yahoo.com在shell…