簡體   English   中英

以下代碼段中可能存在什么問題?

[英]What could be the problem in the following code snippet?

每當我嘗試通過時,以下代碼都會出現分段錯誤。

 main(int c,char *argv[])
 {
     struct hostent *ptr;
     ptr = gethostbyname(argv[1]);
     printf("%s\n", ptr->h_name);
 }

您應該檢查返回值 (ptr) 是否為 NULL(gethostbyname 出錯時返回 NULL)。 當 function 返回 NULL 時,您可以檢查 h_errno 以了解究竟發生了什么。 另見: http://www.manpagez.com/man/3/gethostbyname/

在將參數傳遞給 gethostbyname function 之前,您還應該檢查命令行 arguments 的數量:

if(c < 2) {
    /* print an error */
    return 1;
}

您確定要將參數傳遞給應用程序的命令行嗎?

編輯
您還必須檢查gethostbyname()是否不返回 NULL。

  • 檢查兩個參數是否作為命令行參數傳遞
  • 檢查gethostbyname是否返回有效指針,並根據需要報告問題

.

int main(int argc,char *argv[])
{
   struct hostent *ptr;

   /* Check if there is enough argument */
   if (argc != 2)
   {
     printf ("\nusage: %s <host_name>\n", argv[0]);
     exit (1);
   }

   /* fill up hostent structure */
   ptr = gethostbyname(argv[1]);

   /* Check if we have a valid one */
   if (ptr != NULL)
   {
     printf ("\n%s\n", ptr->h_name);
   }
   else
   {
     /* Print the error */
     printf ("\n%s", hstrerror (h_errno));
   }

   printf ("\n");
   return 0;
}

這項工作在我的系統上找到了gcc file.c -Wall -Wextra./a.out

usage: ./a.out <host_name>

./a.out yahoo.com告訴

yahoo.com

EDIT1:手冊說...

gethostbyname*() 和 gethostbyaddr*() 函數已過時。 應用程序應改為使用 getaddrinfo(3) 和 getnameinfo(3)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM