printf не печатает на экране - PullRequest
0 голосов
/ 30 июня 2019

Я скачал этот файл ToyVpnServer.cpp и выполнил инструкции в заголовке файла.затем я выполнил это с gcc ToyVpnServer.cpp, а затем он создал a.out, и я запустил его (как сказано в заголовке файла) ./a.out tun0 8000 test -m 1400 -a 10.0.0.2 32 -d 8.8.8.8 -r 0.0.0.0 0. перед тем, как скомпилировать его, как показано ниже, я добавил одну строку printf("%d",1000); в началеосновной функции, которая означает, что она должна напечатать 1000 на экране, как только будет выполнена.но ничего не показывает и программа продолжает работать.только когда количество параметров меньше 5, функция printf в if (argc < 5) работает!Я тестирую его как на Ubuntu14, так и на 16.что с ним не так?

...
//-----------------------------------------------------------------------------

int main(int argc, char **argv)
{
printf("%d",1000);
if (argc < 5) {
    printf("Usage: %s <tunN> <port> <secret> options...\n"
           "\n"
           "Options:\n"
           "  -m <MTU> for the maximum transmission unit\n"
           "  -a <address> <prefix-length> for the private address\n"
           "  -r <address> <prefix-length> for the forwarding route\n"
           "  -d <address> for the domain name server\n"
           "  -s <domain> for the search domain\n"
           "\n"
           "Note that TUN interface needs to be configured properly\n"
           "BEFORE running this program. For more information, please\n"
           "read the comments in the source code.\n\n", argv[0]);
    exit(1);
}

// Parse the arguments and set the parameters.
char parameters[1024];
build_parameters(parameters, sizeof(parameters), argc, argv);

...

Ответы [ 2 ]

2 голосов
/ 30 июня 2019

он должен напечатать 1000 на экране, как только будет выполнен .?

Нет , printf() - это библиотечная функция, и ее задача состоит в том, чтобы помещать данные в буфер stdout не непосредственно на консоли, а stdout поток - это буферизованная строка , т.е. он будет отображать свой контент только после того, как достигнет новой строки.

Здесь

printf("%d",1000);

printf() не очищает / сбрасывает поток по умолчанию stdout, программист должен это сделать. Один из способов решить эту проблему - использовать fflush(stdout) как

printf("%d",1000);
fflush(stdout);

или используйте символ новой строки, например

printf("%d\n",1000); /* new line character clears the stdout buffer here */
0 голосов
/ 30 июня 2019

выход (1);выходит из вашей программы.Перед этой строкой используйте getchar ();приостановить экран.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...