1

我正在尝试使用“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 吗?

谢谢!

4

2 回答 2

2

当您irc.ubuntu.com作为输入输入时,它将存储hostnameirc.ubuntu.com\n.
您需要\n通过用 nul 字符覆盖字符串来删除字符串末尾的 :

fgets(hostname,256,stdin);    
hostname[strlen(hostname)-1] = 0;

请注意,第二个参数fgets是要读取的最大字符数(包括最后的空字符),所以在你的情况下你传递它 no 256​​t 255

于 2010-10-17T00:21:08.443 回答
0

每当您输入时,fgets()请记住排除“\ n”:

fgets(hostname,255,stdin);
hostname[strlen(hostname)-1] = 0;
于 2010-10-17T00:20:40.620 回答