[英]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.