我正在尝试使用'gethostbyname'。如果我将主机名直接硬编码到函数调用中,它可以很好地工作。但是,我试图将用户输入传递给此函数。我相信我的问题可能是因为我传递给函数的数组有许多尾随空格。
void connectHost(char *hostname)
{
int n;
//This works
//n = gethostbyname("irc.ubuntu.com");
//This always returns NULL
n = gethostbyname(hostname);
if(n == NULL)
{
printf("Host Not Found.");
}
}
int main()
{
char hostname[256];
fgets(hostname,255,stdin);
connectHost(hostname);
}
那么将主机名传递给函数的最佳方法是什么?我不应该使用fgets吗?
谢谢!
答案 0 :(得分:2)
当您输入irc.ubuntu.com
作为输入时,它将作为hostname
存储在irc.ubuntu.com\n
。
您需要删除最后的\n
通过用nul字符覆盖它的字符串:
fgets(hostname,256,stdin);
hostname[strlen(hostname)-1] = 0;
请注意fgets
的第二个参数是要读取的最大字符数(包括最终的空字符),所以在你的情况下你传递它256
不是255
。
答案 1 :(得分:0)
每当您使用fgets()
输入时,请记住排除'\ n':
fgets(hostname,255,stdin);
hostname[strlen(hostname)-1] = 0;