Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Fallo de segmentacion

Estas en el tema de Fallo de segmentacion en el foro de C/C++ en Foros del Web. Hola, pues eso, el titulo lo dice todo... lo estoy haciendo en linux(Ubuntu) con gcc... la funcion eliminarSL elimina el salto de linea que puede ...
  #1 (permalink)  
Antiguo 07/02/2010, 07:20
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Fallo de segmentacion

Hola, pues eso, el titulo lo dice todo... lo estoy haciendo en linux(Ubuntu) con gcc... la funcion eliminarSL elimina el salto de linea que puede haber en una palabra... pero siempre me tira ese error y no encuentro un posible motivo...

Código C:
Ver original
  1. void eliminarSL( char *palabra ){  
  2.     char *p = NULL;
  3.    
  4.     if( ((p = strchr(palabra, 13 )) == NULL) || ((p = strchr(palabra, 10)) == NULL) || ((p = strchr(palabra, 21)) == NULL) ){
  5.         *p = '\0';
  6.     }
  7. }
  8.  
  9. int main ( int argc, char *argv[] ) {
  10.     char cad[20] = "hola mundo\na";
  11.     printf( "%s\n", cad );
  12.     eliminarSL2( cad );
  13.     printf( "%s\n", cad );
  14.     return( 0 );
  15. }
  #2 (permalink)  
Antiguo 07/02/2010, 10:37
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Fallo de segmentacion

Lo que me pregunto es porque complicarse tanto la vida? Y si hay más de un salto de linea? Porque no usas algo así:
Código C:
Ver original
  1. int i;
  2. char cadena = "Bla\nBle\nBli\n";
  3. char buscar = '\n';
  4. char cambiar = ' ';
  5.  
  6. for( i = 0; i < strlen( cadena ); i++ ) {
  7. if( cadena[ i ] == buscar ) cadena[ i ] = cambiar;
  8. }
  9.  
  10. printf( "%s\n", cadena );
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #3 (permalink)  
Antiguo 07/02/2010, 10:40
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Fallo de segmentacion

Es cierto lo que dice genuine_carlosV2 hay que seguir la filosofía KISS (Keep It Simple and Stupid) cuanto mas sencillo mejor.
Modique un poco tu código para que funcione, la verdad que no entendi porque ponias esos numeros como segundo parametro de la funcion strchr.
Obs: solo modifique para que funcione lo que quisiste hacer, deberías agregrar una funcion de comprimir(cadena, posicion) si es que el problema pide que la longitud del array se modifique.
Si es que el problema no te dice nada al respecto, hacelo practico como te mostro genuine_carlosV2, sin complicaciones =)

El prototipo de la función strchr es

Código C:
Ver original
  1. char *strchr(const char *s, int c);

Código C:
Ver original
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<string.h>
  4. void eliminarSL( char *palabra ){  
  5.     char *p = NULL;
  6.     if((p = strchr(palabra, '\n'))){
  7.         *p = '\0';
  8.     }
  9. }
  10. int main ( int argc, char *argv[] ) {
  11.     char cad[20] = "hola mundo\na";
  12.     printf( "%s\n", cad );
  13.     eliminarSL( cad );
  14.     printf( "%s\n", cad );
  15.     system("PAUSE");
  16.     return 0;
  17. }

Saludos




------------------------------------
visiten www.devshared.net


Última edición por devshared; 07/02/2010 a las 10:47
  #4 (permalink)  
Antiguo 07/02/2010, 11:37
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Fallo de segmentacion

Ok... muchas gracias a los 2 por la ayuda... genuine_carlosV2 en cuanto a si hay mas de un salto de linea en una texto o palabra, pues se supone que no lo hay ya que dicho texto lo saco de un archivo... devshared, me gusta la filosofia esta del KISS...
  #5 (permalink)  
Antiguo 07/02/2010, 13:53
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Fallo de segmentacion

Seria mas bien un principio jejeje me lo habia comentado un profesor en la Facultad cuando estaba con un proyecto

http://es.wikipedia.org/wiki/Principio_KISS


Saludos!!






------------------------------------
visiten www.devshared.net


Etiquetas: fallo
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 06:38.