как объединить несколько * argv в сообщение типа char *

#c #argv

#c #argv

Вопрос:

Я написал клиентскую программу TCP-сокета, которая позволяет пользователю вводить IP, порт и сообщение в качестве аргументов.

Это похоже:

 ./a.out 127.0.0.1 555 test message
  

Мой вопрос в том, как объединить «test» ( argv[3] ) и «message» ( argv[4] ) и многое другое в a char *message ?

Комментарии:

1. просто случайный текст для тестирования, это могут быть любые слова, такие как: наконец-то сделано

2. итак, если test — это просто строка, что означает test(argv[3]) ?

3. это была ошибка, теперь она исправлена.

Ответ №1:

На самом деле вы хотите сделать следующее:

 /a.out 127.0.0.1 555 "test message"
  

Заключив сообщение в кавычки, argv[3] будет содержать полное сообщение. Тогда вам не нужно беспокоиться о объединении аргументов вместе.

Ответ №2:

Вам нужно будет получить длину ваших argv строк, которые вы хотите объединить. Создайте массив символов такого размера, а затем скопируйте строки, используя strcpy (предпочтительно безопасную версию).

Комментарии:

1. Не забудьте добавить место в выходной массив символов для пробелов.

2. .. и писать пробелы между строками.

Ответ №3:

Вы можете использовать strlen для получения длин строк, затем выделить буфер соответствующего размера и использовать sprintf или strcpy для заполнения его вашими форматированными данными.

Но, как говорит Куртис, если все, что вы хотите сделать, это передать вашей программе строку, содержащую пробелы, то это забота оболочки, а не вашей программы. В Unix вы должны использовать одинарные кавычки ( ' ), а в Windows вы можете использовать двойные кавычки ( " ).

Комментарии:

1. В Windows вы также можете использовать GetCommandLine API, который возвращает вам всю нераспределенную строку командной строки.