Viene con la opcion de dejar sNueva como variable local reservando espacio con malloc o hacerla global por si la ocupas en otras funciones restringiendo a 256 saludos!

Código: Seleccionar todo

/***********************
* Coder: Linkgl        *
* Funcion right        *
* Fecha 19/12/2010     *
* indetectables.net    *
* Revolutionteams.info *
***********************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * Right(char *sCadena,int iPosicion);
//char sNueva[256]; <- Opcion 2
int main()
{
  printf("%s",Right("indetectables.net",6));
  getchar();
  return 0;
}

char * Right(char *sCadena,int iPosicion)
{
  int i;
  char *sNueva=malloc(strlen(sCadena))+iPosicion+1; //<- Opcion 1
  for(i=iPosicion-1;i<strlen(sCadena);i++)
  {
    sNueva[strlen(sNueva)]=sCadena[i];
  }
  return sNueva;
}
de una vez publico left ya que es muy parecido para ya tenre el juego completo de Mid(substr) Left y right para el manejo de strings sin apis

Código: Seleccionar todo

/***********************
* Coder: Linkgl        *
* Funcion Left         *
* Fecha 19/12/2010     *
* indetectables.net    *
* Revolutionteams.info *
***********************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * Left(char *sCadena,int iPosicion);
char sNueva[256]; //<- Opcion 2
int main()
{
  printf("%s",Left("indetectables.net",6));
  getchar();
  return 0;
}

char * Left(char *sCadena,int iPosicion)
{
  int i;
  //char *sNueva=malloc(strlen(sCadena))+iPosicion+1; //<- Opcion 1
  for(i=0;i<iPosicion;i++)
  {
    sNueva[strlen(sNueva)]=sCadena[i];
  }
  return sNueva;
}
//mHmm..
eres un maquina codeando no a quien diga lo contrario bro no solo por este que posteas si no en general sigue asi

Salu2!
Imagen

(cuanto más sabes, más cuenta te das de lo poco que sabes).

Mostrar/Ocultar

Exelntes codigos como simpre , una cosita nada mas'...
linkgl escribió:char *sNueva=malloc(strlen(sCadena))+iPosicion+1; //<- Opcion 1
Cada ves que se reserva memoria("malloc()") , no deberias de liberarla("Free()") ?
Gracias por tus codigos bro!
Última edición por ØnLy el 20 Dic 2010, 07:05, editado 1 vez en total.
obey escribió:Pues si tuviese mas edad todavia pero esqe perder la virginidad con tu profesora de informatica y que ademas tenga 50....
Se deberia de liberar la memoria para poder gestionarla mejor y que el programa en si funcionase mejor pero para tan poca cosa da igual.

salu2!
Imagen
Si,aunque no va a pasar nada por no liberarla,pero lo correcto es hacerlo.
Yo no tengo críticas,todo lo contrario...Aprendí un par de cosas leyendo el source.

Muchas gracias,ingenioso código...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
bueno aqui esta el left y right en un solo , aumente un parametro char rl para 'r' //right y 'l' //left
nota si quieres usar ( char sNueva[256]; ) lo tienes que llenar con zeros char sNueva[256]={'\0'};
tambien si quieres usar el ( char * sNueva=new char[strlen(sCadena)]; ) tienes que usar memset(sNueva,0,strlen(sCadena));

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * LR(char *sCadena,int iPosicion,char rl);
int main()
{
  printf("right = %s\n",LR("indetectables.net",6,'r'));// el r es para right
  printf("left = %s\n",LR("indetectables.net",6,'l'));// el l es para left
  getchar();
  return 0;
}

char * LR(char *sCadena,int iPosicion,char rl)
{
  int i;
  char * sNueva=new char[strlen(sCadena)];
  memset(sNueva,0,strlen(sCadena));
  if(rl=='r')
  for(i=iPosicion-1;i<strlen(sCadena);i++)
  {
    sNueva[strlen(sNueva)]=sCadena[i];
  }
  else if(rl=='l')
	    for(i=0;i<=strlen(sCadena)-iPosicion;i++)
  {
    sNueva[strlen(sNueva)]=sCadena[i];
  }

  return sNueva;
}
saludos

Mostrar/Ocultar

Responder

Volver a “Fuentes”