Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обчыная работа со строками

8.6K
23 декабря 2005 года
DeadLOL
22 / / 27.09.2005
char* IpGen (char *_ip,int value)
{

char *new_ip,*buf,*val,*lol;
int count=0;
char buff[20];

buf=strrchr(_ip,'.');
while(_ip!=buf){_ip++;count++;}
_ip-=count;


if((value>=1)&(value<=9))
{
new_ip=new char[count+2];
//new_ip=new char[7];
memmove(new_ip,_ip,count);
new_ip[count]='.';
val=itoa(value,buff,10);
new_ip[count+1]=val[0];
//lol=(char *) realloc((void *)new_ip,11);
return new_ip;
}


if((value>=10)&(value<=99))
{
new_ip=new char[count+3];
//new_ip=new char[8];
memmove(new_ip,_ip,count);
new_ip[count]='.';

val=itoa(value,buff,10);
new_ip[count+1]=val[0];
new_ip[count+2]=val[1];

return new_ip;
}

if((value>=100)&(value<=255))
{

new_ip=new char[count+4];
// new_ip=new char[9];
memmove(new_ip,_ip,count);
new_ip[count]='.';

val=itoa(value,buff,10);
new_ip[count+1]=val[0];
new_ip[count+2]=val[1];
new_ip[count+3]=val[2];

return new_ip;
}

В эту ф-цию входит ip и число от 1 до 255 поидее эта ф-ция должна заменять последний байт ip на второй аргумент ф-ции вобщем так и есть вот тока с выделением памяти проблема вместо count+2 при count=9 выделяется 25 байт или 19. Компилятор - 2005 Ось 2003. Заранее благодарен за ответы.
398
23 декабря 2005 года
Alexandoros
630 / / 21.10.2005
 
Код:
buf = strrchr(_ip, '.');
while(_ip! = buf){_ip++; count++;}
_ip -= count;


проще будет
count = buf - _ip;

Потом
val=itoa(value,buff,10);
что это такое?? - ты ведь меняеш входящую строку _ip!! ужасть одна, короче.

Во вторых - кто тебе сказал, что выделяется 25 байт? Выделяется count + 2 байта. просто кто-то забывает всунуть 0 в конец строки new_ip.
11K
23 декабря 2005 года
Mamontoboy
37 / / 23.12.2005
char* IpGen( const char* ip, int value )
{
char* last_number = strrchr( ip, '.' );

last_number++;

char str_value[0x04];

sprintf( str_value, "%d", value );

char* result = new char[(last_number - ip) + strlen(str_value) + 1];

strncpy( result, ip, (last_number - ip) );
strcpy( result + (last_number - ip), str_value );

return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
char* ip_res;

ip_res = IpGen( "127.0.0.1", 255 );

return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог