LINUX.ORG.RU

strtok


0

0

Есть код ( С++ ): char ip[15]; cout << "Input IP:" << endl; cin >> ip; char* v = strtok(ip,"."); while ( v != 0) { cout << v << endl; v = strtok(0,"."); } } Он предлагает ввести IP адрес, который затем рабивается при помощи strtok ( разделитель точка ). Выглядит это так: user@debian:~/Desktop$ ./a.out Input IP: 10.50.8.1 10 50 8 1 Вопрос: как записать каждое значение вывода в отдельную переменную или лучше в массив переменных? ( Программа пишется для вывода активных хостов в сети ) Спасибо.

anonymous

Форматирование
Есть код ( С++ ):
char ip[20];
cout << "Input IP:" << endl;
cin >> ip;
char* v = strtok(ip,".");
while ( v != 0)
{
cout << v << endl;
v = strtok(0,".");
}
}
Он предлагает ввести IP адрес, который затем рабивается при помощи strtok ( разделитель точка ). Выглядит это так:
user@debian:~/Desktop$ ./a.out
Input IP:
10.50.8.1
10
50
8
1
Вопрос: как записать каждое значение вывода в отдельную переменную или лучше в массив переменных? ( Программа пишется для вывода активных хостов в сети ) Спасибо.

anonymous
()
Ответ на: комментарий от anonymous

> Вопрос: как записать каждое значение вывода в отдельную переменную или лучше в массив переменных? ( Программа пишется для вывода активных хостов в сети ) Спасибо.

man strdup

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

>char* v = strtok(ip,".");

Из man strtok:

BUGS Avoid using these functions. If you do use them, note that:

These functions modify their first argument.

These functions cannot be used on constant strings.

The identity of the delimiting character is lost.

The strtok() function uses a static buffer while parsing, so it's not thread safe. Use strtok_r() if this mat- ters to you.

Лучше заюзать, например, готовый С++-шный класс, как здесь: http://www.codepedia.com/1/CppSeperateString или же сразу boost::tokenizer какой.

php-coder ★★★★★
()

inet_aton(3)

man inet_aton !!!

не изобретайте велосипеды !!!!!

beastie ★★★★★
()
Ответ на: комментарий от anonymous

к примеру так-
#include <vector>

std::vector<int>vect;
while ( v != 0)
{
std::cout << v << std::endl;
v = strtok(0,".");
vect.push_back(atoi(v));
} //вариант для чисел
при линковке не забыть указать флаг -lstdc++

А вообще лучше не заниматься такой чепухой я поюзать функцию inet_ntoa которая по записи ip в точечной нотации вернет эквивалентное 32 битное значение

Maniac
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.