Capturar excepcion

Iniciado por Xedrox, 5 Agosto 2013, 19:25 PM

0 Miembros y 1 Visitante están viendo este tema.

Xedrox

Buenas gente, tengo la siguiente funcion que guarda una subcadena en otra. El problema es que cuando la pifio con los indices el program genera un dump. No puedo usar strlen ni el caracter nulo para extrer la subcadena, porque la cadena original esta llena de nulos intermedios que tengo que conservar, asi que simplemente hago:


void subString(char *src,char *dest,int posInicial,int longitud)
{
for(int i=0;i<longitud;i++)
{
dest[i]=src[posInicial+i];
}
}


Como captura la excepcion que se genere cuando hago una referencia a un indice que no existe?

Muchas Gracias
Saludos

amchacon

Código (cpp) [Seleccionar]
Como captura la excepcion que se genere cuando hago una referencia a un indice que no existe?
C no comprueba los índices de los arrays, de modo que no puede saber si estás accediendo a una zona protegida o no (esto se hizo para ganar rendimiento, confiando en que el programador fuese lo bastante espabilado como para no acceder a posiciones fuera del array). Lo ideal esque te pasen el tamanyo de la segunda cadena y devuelvas un error si posInicial+Longitud > Tamanyo.

¿Estás en C o C++? El segundo tiene una clase string con muchas de estas cosas hechas:
http://www.cplusplus.com/reference/string/string/
http://www.cplusplus.com/reference/string/string/assign/
http://www.cplusplus.com/reference/string/string/substr/
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

BlackZeroX

#2
En lugar de esa función mejor...


const char src[] = "HolaMundo";
      char dst[10] = {};
    memcpy(dst, &src[3], 5); // El parametro posInicial no es necesario lo puedes calcular por fuera... en este caso es el indice 3
    puts(src);
    puts(dst);


La excepción la puedes capturar con un if() pero debes tener guardada la longitud de el bloque de memoria reservado.

Dulces Lunas!¡.
The Dark Shadow is my passion.