2010-10-17 57 views
1

我正在尝试使用'gethostbyname'。如果我将一个主机名直接硬编码到函数调用中,那么效果很好。但是,我试图将用户输入传递给此函数。我相信我的问题可能是因为我传递给函数的数组有很多尾随空格。如何制作一个适合stdin字符串的数组?

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

当你进入irc.ubuntu.com作为输入,它会被存储在hostnameirc.ubuntu.com\n
你需要用空字符作为覆盖它删除\n在字符串的结尾:

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

注意的fgets的第二个参数是包括最后要读取的最大字符数(空字符),所以在你的情况下,你通过它256而不是255

0

当你输入使用fgets()记得要排除“\ n”的

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

注意'fgets'并不总是* *包含一个尾随换行(例如,如果线路被截断,或者在文件的最后一行不一端)。 – jamesdlin 2010-10-17 01:32:47

+0

@ jamesdlin:谢谢。我其实提供了适合OP的必要性的简单答案。 OP正在从'stdin'输入并且有换行问题。 – Donotalo 2010-10-17 02:23:42

+0

使用'stdin'很可能会有最终的换行符,但不能保证它(可以按下shell的EOF组合键)。 – jamesdlin 2010-10-17 11:44:48