buf = strrchr(_ip, '.');
while(_ip! = buf){_ip++; count++;}
_ip -= count;
Обчыная работа со строками
{
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. Заранее благодарен за ответы.
Код:
проще будет
count = buf - _ip;
Потом
val=itoa(value,buff,10);
что это такое?? - ты ведь меняеш входящую строку _ip!! ужасть одна, короче.
Во вторых - кто тебе сказал, что выделяется 25 байт? Выделяется count + 2 байта. просто кто-то забывает всунуть 0 в конец строки new_ip.
{
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;
}