2015-08-19 5 views
-1

Очень простой вопрос, но внутри моего кода у меня есть две переменные char *.Добавление переменных char * вместе?

char* port = "1100"; 
char* ip = inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr); 

Первый номер порта, а второй - адрес ip данного интерфейса.

Если бы я хотел, чтобы создать новую переменную сказать, символ * как, почему это я не могу сказать:

char* both = ip + port; 

с выходом 172.21.8.179 1100? Как я могу получить новую переменную с этим выходом? Спасибо

+1

http://www.cplusplus.com/reference/cstring/strcat/ – Jashaszun

+1

Не добавлять метки для различных языков! C++ не C. – Olaf

+2

И прочитайте, что такое _pointer_. Вы, кажется, даже не подозреваете о них. Я бы рекомендовал прочитать C bokk или сделать учебник. – Olaf

ответ

-1

Вы не можете добавить две строки в C, потому что, ну, они на самом деле не строки. Они просто указатели. И добавление двух указателей приводит к указателю, указывающему на адрес, который является суммой двух исходных адресов.

Чтобы объединить два char* s вместе, вы можете использовать функцию strcat(char * destination, const char * source). Просто убедитесь, что ваш указатель both указывает на достаточную память, чтобы фактически удерживать конкатенированную строку!

+0

«И добавление двух указателей приводит к указателю, указывающему на адрес, который является суммой двух исходных адресов». - это нарушение ограничений. Указатели не являются фантазийными целыми числами. –

+0

строки не указатели. В некоторых случаях они ведут себя как указатели, но они не являются указателями. – Peter

+1

@Peter Я думаю, что он пытается сказать, что строки в C реализованы как массив символов, а массивы часто управляются с помощью указателей на их первый элемент. Поэтому вы не можете использовать '+' при конкатенации строк, потому что добавление двух указателей бессмысленно. Формулировка может быть сложной. –

1

вы, вероятно, хотите использовать snprintf

char buff[100]; 
snprintf(buff, sizeof(buff), "%s %s", port, ip); 
+2

проверить свои аргументы snprintf –

+0

Принимая кувалду, чтобы расколоть орех. Что случилось с strcpy здесь? – Olaf

+1

@Olaf Вам понадобится 'strcpy', за которым следуют два' strcat', чтобы выполнить то, что делает 'snprintf'. И использование кувалды для взлома орехов улучшит вашу силу рук, так что это беспроигрышный :) – user3386109

Смежные вопросы