Autor
|
Tema: Problema a la hora de usar string.h (Leído 2,598 veces)
|
aprendiz de programador
Desconectado
Mensajes: 4
|
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. #include <stdio.h> #include <stdlib.h> #include <string.h> void insercion_directa( char *nombre[]){ int i,j; char aux[20]; for(i=1;i<4;i++){ j=i; while(strcmp(nombre [j -1],aux )>0 && j >0){ strcpy(nombre [j ],nombre [j -1]); j--; } } } int main(){ char *nombre[20]; nombre [20]=(char*)calloc(4,sizeof(char));nombre[0]="Alberto"; nombre[1]="Joseluis"; nombre[2]="Iván"; nombre[3]="Becan"; insercion_directa(nombre); for(int i =0;i <4;i ++) printf(" %s\n", nombre [i ]); //strcpy y strcmp return 0; }
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
En vez de nombre[0]="Alberto";
Debes escribir
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 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
Mensajes: 219
https://www.youtube.com/watch?v=IlY9C6pzxKc
|
#include <stdio.h> #include <string.h> void insercion_directa(char nombre[4][20]) { short i,j; char aux[20]; for(i = 1; i < 4; i++) { j = i; while((strcmp(nombre [j -1],aux ) > 0) && (j > 0)) { strcpy(nombre [j ], nombre [j -1]); j--; } } } int main() { char nombre[4][20]; strcpy(nombre [0], "Joseluis"); insercion_directa(nombre); for(int i=0;i<4;i++) return 0; }
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
Mensajes: 94
|
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
Mensajes: 1.603
|
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. void insercion_directa(char *nombre[]) { int i, j, fin; char *aux; for(i = 1; i < 4; i++) { fin = 0; for(j = i; j > 0 && !fin; j--) { if(strcmp(nombre [j -1], nombre [j ]) > 0) { aux = nombre[j-1]; nombre[j-1] = nombre[j]; nombre[j] = aux; fin = 1; } } } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Sintaxis para usar String y la condicion if.
« 1 2 »
Java
|
superpana
|
10
|
24,410
|
23 Mayo 2007, 18:38 pm
por marioly
|
|
|
El programa se cierra al usar string[]
Programación C/C++
|
Shout
|
5
|
3,321
|
3 Noviembre 2012, 23:32 pm
por lapras
|
|
|
Usar la hora en programa
Programación C/C++
|
Baal_30
|
9
|
3,587
|
17 Julio 2014, 12:26 pm
por leosansan
|
|
|
tengo un problema de rendimiento a la hora de usar juegos
GNU/Linux
|
KZN
|
4
|
3,174
|
2 Octubre 2014, 15:36 pm
por KZN
|
|
|
[C] Comparar 2 cadenas sin usar <string.h>
« 1 2 »
Programación C/C++
|
Ataulfo7
|
16
|
11,199
|
9 Abril 2015, 19:22 pm
por Miseryk
|
|