| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
ramona98
Registrado: 20 Ago 2013 Mensajes: 5
| Publicado: 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++ 
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
| Publicado: 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
| Publicado: 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  |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |