怎么做一个适合stdin字符串的数组?

时间:2010-10-17 00:17:35

标签: c arrays newline fgets

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

谢谢!

2 个答案:

答案 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;