aquí os dejo una versión del Substr de
linkgl hecha por mí, utilizando la idea de Drinky94 de usar malloc() para que no quede restringida a 256 caracteres la nueva cadena y creando 2 condiciones de parada del bucle para que en ningún caso se salga fuera de rango. en la función main() están los casos "extremos" como ejemplos junto a la cadena original.
Código: Seleccionar todo
//substr_r007.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/******************************************
* Coder: R-007 *
* Function: *
* Substr(cadena, inicio, longitud) *
* Substr modification, original by linkgl *
* Indetectables.net/foro *
* Date: 18/12/2010 *
******************************************/
char *substr(char * szCadena,int izInicio,int izLongitud)
{
int i= 0;
int len = 0;
//strLen(szNueva) 'is' len, if izLongitud > 0
if (izLongitud > 0) len = izLongitud;
char * szNueva = malloc(len);//requires stdlib.h
while ((i+izInicio < strlen(szCadena))&&(i<len)){
szNueva[i]=szCadena[i+izInicio];
i++;
}
return szNueva;
}
int main ()
{
char* original = "http://indetectables.net/foro/";
char* example1 = substr(original,7,-10);
char* example2 = substr(original,7, 30);
char* example3 = substr(original,7, 13);
printf("SUBSTR BY R-007:");
printf("\n----------------------------");
printf("\noriginal:%s",original); //returns "http://indetectables.net/foro/"
printf("\nsubstr1:%s",example1); //returns ""
printf("\nsubstr2:%s",example2); //returns "indetectables.net/foro/"
printf("\nsubstr3:%s",example3); //returns "indetectables"
printf("\n----------------------------");
getchar();
return 0;
}
//eof substr_r007.c