Foros del Web » Programación para mayores de 30 ;) » Programación General »

Un buffer se me desborda o no sé que pasa!

Estas en el tema de Un buffer se me desborda o no sé que pasa! en el foro de Programación General en Foros del Web. El siguiente código me peta, me da violación de segmento cuando lo que quiero comparar es cierto: Código: fgets(buffer,BUFFSIZE,stdin); printf("Tengo en el buffer %s\n", buffer); ...
  #1 (permalink)  
Antiguo 14/06/2005, 13:01
 
Fecha de Ingreso: mayo-2005
Mensajes: 68
Antigüedad: 19 años
Puntos: 0
Un buffer se me desborda o no sé que pasa!

El siguiente código me peta, me da violación de segmento cuando lo que quiero comparar es cierto:

Código:
fgets(buffer,BUFFSIZE,stdin);
printf("Tengo en el buffer %s\n", buffer);

if (strcmp(buffer,"REGISTER \n")==0)
				{
				int i,j=0;
				for(i=9;i<19;i++)
					{
					if(buffer[i]!='\n') //ALMACENO NOMBRE USUARIO
						{
						usuari[j]=buffer[i];
						j++;
						}		
					}
                                 }
buffer estaba antes definido como:
#define BUFFSIZE 2048
char buffer[BUFFSIZE];


Alguna idea? Gracias
  #2 (permalink)  
Antiguo 14/06/2005, 13:23
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
(Suponiendo que usuari apunta a una zona de memoria válida...)

El único fallo que veo es que nunca compruebas el '\0'. Te recuerdo que el terminador de una cadena no es '\n' sino '\0' y deberías comprobarle siempre, aparte de los demás que necesites.


Por cierto, haces algo extraño... ¿No es mejor simplificar así?

for(int i=9, int j=0;i<19&&buffer[i]!='\n'&&buffer[i]!='\0';i++,j++) usuari[j]=buffer[i];


O sin la j:

for(int i=9;i<19&&buffer[i]!='\n'&&buffer[i]!='\0';i++) usuari[i-9]=buffer[i];


O mejor aún:

int i=9;
while(i<19&&buffer[i]!='\n'&&buffer[i]!='\0') usuari[i-9]=buffer[i];


O incluso si quieres hacer el bobo todavía más:
int i=9;
while(i++<19&&buffer[i]!='\n'&&(usuari[i-9]=buffer[i])!='\0'); **

** Eso del ++ dentro puede no funcionar igual en los distintos compiladores, hay que tener cuidado.

Para que luego digan que sólo Perl tiene distintas maneras de hace runa misma cosa .
  #3 (permalink)  
Antiguo 14/06/2005, 13:25
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Mira, no se mucho del asunto, pero segun veo tu codigo no es a prueba de errores, osea no hace ninguna comprobacion antes de acceder a la memoria, alomejor esl ciclo es mas grande o alguna variable no tiene el suficiente numero de elementos para satisafacer el codigo, te recomiendo que no uses cosas asi, mejor usa codigoa prueba de errores.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.