elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema a la hora de usar string.h
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema a la hora de usar string.h  (Leído 2,280 veces)
aprendiz de programador

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Problema a la hora de usar string.h
« en: 30 Enero 2016, 17:39 pm »

Buenas programadores, resulta que me da una violacion del segmento al intentar realizar una insercion directa, a traves de cadenas de caracteres, lo que me gustaria es poder ordenarlas a traves de su orden lexicografico..
Un saludo, y gracias de antemano.
PD: el problema me lo da a la hora de usar strcpy y no entiendo porque.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. void insercion_directa( char *nombre[]){
  5. int i,j;
  6. char aux[20];
  7. for(i=1;i<4;i++){
  8.  
  9. strcpy(aux, nombre[i]);
  10.  
  11. j=i;
  12.  
  13. while(strcmp(nombre[j-1],aux)>0 && j>0){
  14.  
  15. strcpy(nombre[j],nombre[j-1]);
  16. j--;
  17. }
  18. strcpy(nombre[j],aux);
  19. }
  20. }
  21. int main(){
  22.  
  23. char *nombre[20];
  24. nombre[20]=(char*)calloc(4,sizeof(char));
  25. nombre[0]="Alberto";
  26. nombre[1]="Joseluis";
  27. nombre[2]="Iván";
  28. nombre[3]="Becan";
  29. insercion_directa(nombre);
  30. for(int i=0;i<4;i++) printf(" %s\n", nombre[i]);
  31.  
  32. //strcpy y strcmp
  33. return 0;
  34. }
  35.  


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema a la hora de usar string.h
« Respuesta #1 en: 30 Enero 2016, 18:21 pm »

En vez de
Código
  1. nombre[0]="Alberto";
Debes escribir
Código
  1. nombre[0] = calloc(strlen("Alberto") + 1, sizeof(char));
  2. strcpy(nombre[0], "Alberto");


De hecho, ya que tu lista son punteros a char debes reestructurar todo el programa para trabajar con punteros, no con arrays. Y ya que usas punteros en la función insercion_directa no debes hacer uso de strcpy sino moveri directamente los punteros.

Otra forma sería usar una lista cuadrada, al estilo
Código
  1. char nombre[4][80];
entonces la programación sería más sencilla pero tendrías muchos bytes que no usarías.

Recuerda que, ya que tienes que usar calloc, cuándo termines de usar los datos debes liberar la memoria con free.


« Última modificación: 30 Enero 2016, 22:45 pm por Eternal Idol » En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: Problema a la hora de usar string.h
« Respuesta #2 en: 30 Enero 2016, 19:02 pm »

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. void insercion_directa(char nombre[4][20])
  4. {
  5.  short i,j;
  6.  char aux[20];
  7.  for(i = 1; i < 4; i++)
  8.  {
  9.    strcpy(aux, nombre[i]);
  10.    j = i;
  11.    while((strcmp(nombre[j-1],aux) > 0) && (j > 0))
  12.    {
  13.      strcpy(nombre[j], nombre[j-1]);
  14.      j--;
  15.    }
  16.    strcpy(nombre[j],aux);
  17.  }
  18. }
  19.  
  20. int main()
  21. {
  22.  char nombre[4][20];
  23.  strcpy(nombre[0], "Joseluis");
  24.  strcpy(nombre[1], "Alberto");
  25.  strcpy(nombre[2], "Iván");
  26.  strcpy(nombre[3], "Becan");
  27.  insercion_directa(nombre);
  28.  for(int i=0;i<4;i++)
  29.    printf(" %s\n", nombre[i]);
  30. return 0;
  31. }

Si usas arrays, usa solo los arrays, no juntes punteros con arrays ni cosas raras. Como consejo.
En línea

Justicia es dar a cada uno lo que se merece
furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
Re: Problema a la hora de usar string.h
« Respuesta #3 en: 30 Enero 2016, 21:23 pm »

Citar
Si usas arrays, usa solo los arrays, no juntes punteros con arrays ni cosas raras. Como consejo.

el uso de char* arreglo[10]; es totalmente válido, no pasa nada, son 10 punteros apuntando a caracter, no tiene ninguna violación.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema a la hora de usar string.h
« Respuesta #4 en: 30 Enero 2016, 22:12 pm »

Tienes un problema de base y es que las cadenas literales NO se pueden modificar porque son constantes.

Así cuándo en tu programa quieres hacer un strcpy de una cadena a otra realizas una operación ilegal de modificación de una zona de memoria con solo permiso de lectura.

Para hacer strcpy necesitas que la memoria pueda ser modificable y eso lo puedes hacer accediendo a la memoria del montón con malloc o calloc. En ese caso debes pensar que copias una cadena más larga a otra que tiene menor espacio estarás escribiendo en una zona de datos desconocida. Por eso podrías definir una tabla con el tamaño de la mayor cadena.

O, como dije, puedes intercambiar punteros con lo que no incurrirás a problemas de espacio y podrás seguir usando el array de punteros.

Código
  1. void insercion_directa(char *nombre[]) {
  2. int i, j, fin;
  3. char *aux;
  4.  
  5. for(i = 1; i < 4; i++) {
  6.        fin = 0;
  7.        for(j = i; j > 0 && !fin; j--) {
  8.            if(strcmp(nombre[j-1], nombre[j]) > 0) {
  9.                aux = nombre[j-1];
  10.                nombre[j-1] = nombre[j];
  11.                nombre[j] = aux;
  12.                fin = 1;
  13.            }
  14.        }
  15.    }
  16. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sintaxis para usar String y la condicion if. « 1 2 »
Java
superpana 10 23,927 Último mensaje 23 Mayo 2007, 18:38 pm
por marioly
El programa se cierra al usar string[]
Programación C/C++
Shout 5 3,099 Último mensaje 3 Noviembre 2012, 23:32 pm
por lapras
Usar la hora en programa
Programación C/C++
Baal_30 9 3,279 Último mensaje 17 Julio 2014, 12:26 pm
por leosansan
tengo un problema de rendimiento a la hora de usar juegos
GNU/Linux
KZN 4 2,973 Último mensaje 2 Octubre 2014, 15:36 pm
por KZN
[C] Comparar 2 cadenas sin usar <string.h> « 1 2 »
Programación C/C++
Ataulfo7 16 10,539 Último mensaje 9 Abril 2015, 19:22 pm
por Miseryk
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines