C 如何制作适合stdin字符串的数组?

C 如何制作适合stdin字符串的数组?,c,arrays,newline,fgets,C,Arrays,Newline,Fgets,我正在尝试使用“gethostbyname”。如果我将主机名直接硬编码到函数调用中,效果会很好。但是,我正在尝试将用户输入传递到此函数中。我相信我的问题可能是因为我传递给函数的数组有很多尾随空格 void connectHost(char *hostname) { int n; //This works //n = gethostbyname("irc.ubuntu.com"); //This always returns NULL n

我正在尝试使用“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);
    } 
那么,将主机名传递给函数的最佳方式是什么呢?我不应该使用FGET吗


谢谢

无论何时使用
fgets()
输入,请记住排除“\n”:

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

当您输入
irc.ubuntu.com
作为输入时,它将以
irc.ubuntu.com\n
的形式存储在
hostname
中。您需要删除字符串末尾的
\n
,方法是用nul字符覆盖它,如下所示:

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

请注意,的第二个参数是要读取的最大字符数(包括最后一个空字符),因此在本例中,您可以传递它
256
而不是
255

请注意,
fgets
并不总是包含尾随换行符(例如,如果行被截断或文件中的最后一行不是以一行结尾)@jamesdlin:谢谢。我实际上提供了一个简单的答案,应该符合OP的需要。OP正在从
stdin
获取输入,并且有换行符问题。使用
stdin
很可能会有最后的换行符,但这并不能保证它(您可以按shell的EOF组合键)。