/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Error "Segmentation fault (core dumped)"

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
ramona98



Registrado: 20 Ago 2013
Mensajes: 5

MensajePublicado: 20/08/2013 5:51 am
Título: Error "Segmentation fault (core dumped)"

Hola soy nueva en el foro y estoy aprendiendo a programar en C++ Smile

Bueno, tengo un problema con este programa:

Cita:
#include <stdio.h>
#include <string.h>

// Exercise 9-6: Write a function that scans a character array for the character - and
// replaces it with _.

int maximo(char string1[100])
{
int index1, index2; // index into the string

for(index1=0 ; index1 < strlen(string1)-1 ; index1++){ //recorre cadena
if(string1[index1] == '-') { //compara
string1[index1] = '_'; //cambia el valor, si lo encuentra
}

}

return (string1[100]);
}

int main()
{
char bingo[100] = "Hello-my-friend";

printf("%s\n", maximo(bingo));

return (0);
}


Y me da este error:
Cita:
Segmentation fault (core dumped)


Por mas que lo reviso no encuentro donde puede estar el error, alguien sabria?
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7530
Ubicación: Mexico

MensajePublicado: 20/08/2013 6:49 am
Título:

El error se debe a que la función "maximo" retorna un valor de tipo int y tu tratas en la llamada a printf de imprimirlo como si fuera una cadena:
Código:
printf("%s\n", maximo(bingo));


Los cambios que debes realizar son:
1) Cambiar el tipo de retorno de la función "maximo" a "char *".
2) Dentro de esa función retornas "string1".

Con ello el programa termina así:
Código:
#include <stdio.h>
#include <string.h>

char *maximo(char string1[]);

int main(void)
{
   char bingo[] = "Hello-my-friend";
   
   printf("%s\n", maximo(bingo));
   
   return 0;
}

char *maximo(char string1[])
{
   int i;
   
   for (i = 0; string1[i] != '\0'; i++)
      if (string1[i] == '-')
         string1[i] = '_';
   
   return string1;
}


Aparte de eso algunos comentarios y/o sugerencias:

* Declara solo las variables que vayas a utilizar, en la función maximo declaras "index2" pero no la utilizas.

* Si utilizas una literal para declarar un array no indiques (salvo una buena razón) el numero de caracteres, deja que el compilador se encargue de ello (un ejemplo en el programa).

* En C los indices validos de un array son 0 a N-1 donde N es el numero de elementos, tomando como base tu programa original:
Código:
return (string1[100]);

No es valido ya que el elemento "string1[100]" no existe.

* No es necesario utilizar la función strlen para controlar el bucle en la función maximo ya que el final de la cadena esta indicado por el carácter '\0'.

Por ultimo si no tienes un buen curso te recomiendo que revises la sección "Cursos" de este sitio.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
ramona98



Registrado: 20 Ago 2013
Mensajes: 5

MensajePublicado: 21/08/2013 3:12 am
Título:

gracias, estoy siguiendo un libro, pero creo que empezare ocn algun de los cursos de la web Smile
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com