Как сделать массив, который соответствует строке из стандартного ввода? - PullRequest
1 голос
/ 17 октября 2010

Я пытаюсь использовать '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 ]

2 голосов
/ 17 октября 2010

Когда вы вводите irc.ubuntu.com в качестве ввода, оно будет сохранено в hostname как irc.ubuntu.com\n.
. Вам нужно удалить \n в конце строки, перезаписав его нулемсимвол как:

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

Обратите внимание, что 2-й аргумент fgets - это максимальное количество символов для чтения (, включая последний нулевой символ),так что в вашем случае вы передаете это 256 не 255.

0 голосов
/ 17 октября 2010

Всякий раз, когда вы вводите, используя fgets(), не забудьте исключить '\ n':

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