Ver Mensaje Individual
  #5 (permalink)  
Antiguo 10/06/2014, 16:28
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Duda problema sencillo de cadena de caracteres C

Mejoro sólo un poco más lo que leosansan ofrece:

Una expresion como esta:

Código C:
Ver original
  1. while ((caracteres[j] = getche()) != '.' && j < 50)

considera el j < 50 para que cuando j sea 50 o mas no se esté escribiendo en el arreglo en una posicion más allá de sus límites.

C y C++ funcionan con "corta-circuito": en una secuencia de expresiones separadas por &&, la primera expresion que es falsa hace que el resto no se evalúe, por lo que conviene rotar el chequeo y escribirlo asi:

Código C:
Ver original
  1. while (( j < 50 ) && (caracteres[j] = getche()) != '.' )

con ello, si j es 50 o mas, j <50 será falso, la asignacion que viene a continuacion no intentará hacerse siquiera y no se escribirá en caracteres[50].

En la expresion original, mostrada más arriba, lo primero que se hará será escribir en la posicion 50 para luego comprobar si era posible hacerlo, vale decir, ocurrirá corrupción/sobreescritura de memoria en ese caso.
__________________
Visita mi perfil en LinkedIn