conexion de red es un termino ambiguo da mas detalles de loq ue deseas hacer
.
Ducles Luans!¡.
.
Ducles Luans!¡.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: 08l00D en 13 Enero 2011, 15:49 PM
unsigned long strlen(char* string)
/**
Retorna la longitud de [string]
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{//no esta mal pero deberias restarle 1 a i antes de retornarla asi no incluye el valor te terminador de cadena, asi el que use tu implementacion de la funcion no tenga que restarle 1 al valor cada vez que la use...
unsigned long i=0;
while (*(string++) != '\0') i++;
return i;
}
printf("%d\n",strlen((char*)"hola"));
/*
tiene que devolver una longitud de 4 caracteres que es lo que interesa, el '\0' al final no nos interesa.
* Salida 4.
*/
Cita de: 79137913 en 12 Enero 2011, 14:28 PM
Bueno... parece que no va a agregarse nadie mas
int main()
{
long lim=-1;
long limback=lim;
char **array = split((char*)"Este es un hola mundo desde InfrAngeluX-Soft",(char*)"u",&lim);
if ( array != 0 )
{
limback=lim;
for (; lim>-1 ;lim-- )
printf ("%d \t %s \n", lim, array[lim] );
for (; limback>0 ;limback-- )
free (array[limback]);
free(array);
}
getchar();
return 0;
}
Heap block at 003E1750 modified at 003E175E past requested size of 6
#include<stdlib.h>
#include<stdio.h>
#ifndef bool
typedef enum bool { false, true } bool;
#endif
unsigned int rectific_num(unsigned int vval,unsigned int vmin,unsigned int vmax);
bool fix_numbers_range(unsigned int* vIndexIni,unsigned int* vIndexEnd, unsigned int* vLen, unsigned int vMin, unsigned int vMax);
unsigned long strlen(char* string);
unsigned long instr(unsigned long start,char* string1,char* string2);
char* mid(char* str, unsigned int start, unsigned int len);
char* strcpy(char* str_dest,char* str_src);
char** split(char* str, char* delimiter, long* limit);
int main()
{
long lim=-1;
long i=0;
char **array = split((char*)".Este.es.Hola.Mundo.Hola.mundo.",(char*)".",&lim);
if ( array != 0 )
{
printf("Index\tValue\n",lim);
for ( i=0 ; i <= lim ;i++ )
{
printf("%d\t%s\n",i,array[i]);
free (array[i]);
}
free(array);
}
getchar();
return 0;
}
unsigned int rectific_num(unsigned int vval,unsigned int vmin,unsigned int vmax)
/**
Corrige [vVal] con respecto a un minimo y a un maximo valor.
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{
if (vval < vmin)
return vmin;
else if ( vval > vmax )
return vmax;
else
return vval;
}
bool fix_numbers_range(unsigned int* vIndexIni,unsigned int* vIndexEnd, unsigned int* vLen, unsigned int vMin, unsigned int vMax)
/**
Corrige los rangos de [vIndexIni],[vIndexEnd], [vLen] con respecto a un minimo y a un maximo valor.
[vLen] corresponde a la distancia entre [vIndexIni] y [vIndexEnd].
Se retorna false solo si [vMax] es menor que que [vIndexIni] o que [*vLen] es igual o menor a [0]
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{
if ( vMax >= *vIndexIni && *vLen != 0 )
{
*vIndexIni = rectific_num(*vIndexIni,vMin,vMax);
*vIndexEnd = rectific_num(*vIndexIni + *vLen,*vIndexIni,vMax);
*vLen= *vIndexEnd - *vIndexIni+1;
return ( (*vLen > 0) ? true: false);
} else {
return false;
}
}
unsigned long strlen(char* string)
/**
Retorna la longitud de [string]
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{
unsigned long i=0;
while (*(string++)) i++;
return i;
}
char* strcpy(char* str_dest,char* str_src)
/**
Copia [*str_src] a [*str_dest].
Retorna el puntero a [str_dest]
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{
char *copyreturn = str_dest;
while(*(str_dest++)=*(str_src++));
return copyreturn;
}
unsigned long instr(unsigned long start,char* string1,char* string2)
/**
[Start] indica la posicion inicial donde se empesara a buscar en [string1]
Retorna la posicion de [*string2] en [*string1].
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{
unsigned long q,c,limit;
q=c=limit=0;
long ls2len=0;
ls2len = strlen(string2) - 1;
if ( ls2len >= 0 )
{
limit = strlen(string1)-ls2len;
if ( limit > 1 )
{
q = start-1;
while ( q < limit )
{
while ( string1[q+c] == string2[c] )
if ( (c++) == (unsigned long)ls2len )
return q+1;
q+=c+1;
c=0;
}
}
} else if (*string1 > '\0') {
return 1;
}
return 0;
}
char* mid(char* str, unsigned int start, unsigned int len)
/**
Se obtiene el fragmento deseado de [*str]
[Start] Indica desde donde se empesara
[Len] Indica la distancia.
Retorna el puntero al clon del fragmento deseado de [*str]
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{
char* pch_t = 0;
unsigned int ul_str=strlen(str);
unsigned int ul_end=start+len;
start--;
if ( fix_numbers_range(&start,&ul_end,&len,0,ul_str) == true )
{
if ( (pch_t = (char*)malloc(sizeof(char)*len)) != 0 )
{
for (ul_str=0;ul_str < (len-1) ;start++,ul_str++ )
pch_t[ul_str] = str[start];
pch_t[len-1]='\0';
}
} else {
if ( (pch_t = (char*)malloc(sizeof(char))) != 0 )
pch_t[0]='\0';
}
return pch_t;
}
char** split(char* str, char* delimiter, long* limit)
/**
Separa a [*str] cada vez que se encuentre a [*delimiter] con un limite definido en [*limit]
Si [*limit] = -1 se crea un Maximo mayor a [-1] en el indice del vector retornado
Si [*limit] > -1 Se indica y establece un indice mayor [pero no fijo] del indice mayor del vector retornado
En ambos casos [*limit] retorna el Indice maximo del vector retornado por la funcion y la funcion retorna el puntero a el vector retultante.
En casos contrarios no crea un vector y retorna 0 y [*limit] = [-1]
By BlackZeroX ( http://Infrangelux.sytes.net/ )
**/
{
unsigned int ui_lp =1;
unsigned int ui_inc =1;
unsigned int ui_lns =0;
unsigned int ui_del =0;
unsigned long ui_ub =0;
char **pi_out =0;
if ( *limit >= -1 )
{
if ( strlen(delimiter) == 0 )
delimiter = (char*)" ";
ui_lns = strlen(str);
ui_del = strlen(delimiter);
pi_out = (char**)malloc(sizeof(char*));
for(;pi_out!=0;)
{
if ( ui_ub == *limit )
{
pi_out[ui_ub] = mid(str, ui_lp,ui_lns);
ui_ub = *limit;
break;
}
ui_inc = instr(ui_inc, str, delimiter);
if ( ui_inc == 0 )
{
pi_out[ui_ub] = mid(str, ui_lp,ui_lns);
break;
}
pi_out[ui_ub] = mid(str, ui_lp, ui_inc - ui_lp);
pi_out = (char**)realloc(pi_out,sizeof(char*)*(++ui_ub+1));
ui_lp = ui_inc + ui_del;
ui_inc = ui_lp;
}
*limit = ui_ub;
return pi_out;
}
*limit=-1;
return 0;
}
Cita de: paju1986 en 9 Enero 2011, 23:54 PM
PD: los programadores en VB parece que lo hacen al revés