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

[SOLUCIONADO] error usando cadenas

Estas en el tema de error usando cadenas en el foro de C/C++ en Foros del Web. hola , el ejercicio que trato de hacer es simple insertar una sub cadena en otra, a partir de una posicion dada me funciona bien(compila ...
  #1 (permalink)  
Antiguo 10/02/2014, 08:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 14 años, 2 meses
Puntos: 0
error usando cadenas

hola , el ejercicio que trato de hacer es simple
insertar una sub cadena en otra, a partir de una posicion dada

me funciona bien(compila todo), pero me salta un error de debug en una ventanita que dice omitir o continuar, se ve el resultado, el cual esta bien pero la ventanita me bajaria puntos si me pasaria en alguno de mis examenes

les dejo el codigo y abajo el error

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void insertarSub(char cad1[], char cad2[], int pos);
  5. int main()
  6. {
  7.     char micad1[] = "hola ";
  8.     char micad2[] = "como";
  9.     insertarSub(micad1, micad2,2);
  10.     return 0;
  11. }
  12.  
  13. void insertarSub(char cad1[], char cad2[], int pos)
  14. {
  15.     int i = pos;
  16.     int j = 0;
  17.     int lar = strlen(cad2);
  18.     char aux[100];
  19.     char aux0[100];
  20.  
  21.     for (i = 0; i < pos; i++)
  22.     {
  23.         aux0[j] = cad1[i];
  24.         j++;
  25.     }
  26.     aux0[j] = '\0';
  27.     j = 0;
  28.     puts(aux0);
  29.  
  30.     for (i= pos; cad1[i]; i++)
  31.     {
  32.         aux[j] = cad1[i];
  33.         j++;
  34.     }
  35.     aux[j] = '\0';
  36.     strcat(aux0, cad2);
  37.     puts(aux0);
  38.     strcat(aux0, aux);
  39.     puts(aux0);
  40.  
  41.     strcpy(cad1, "");
  42.    
  43.     strcpy(cad1, aux0);
  44.     puts(cad1);
  45. }

run-time check failure#2 - stack around the variable 'micad1' was corrupted



si comento el ultimo strcat funciona bien, el tema es con micad1 :/
  #2 (permalink)  
Antiguo 10/02/2014, 08:39
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: error usando cadenas

No tienes espacio suficiente en el string de destino para copiar los datos que intentas copiar.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 10/02/2014, 19:01
 
Fecha de Ingreso: febrero-2014
Mensajes: 5
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: error usando cadenas

En efecto, suponiendo que el código de insertarSub sea correcto (no le he revisado a fondo), el problema es que la declaración
Código C++:
Ver original
  1. char micad1[] = "hola ";
informa al compilador que reserve en micad1 el espacio justo para la cadena "hola". Y por cierto que, si mi memoria no me falla, esta declaración implica además que la cadena declarada es tipo "const char *", es decir, una cadena constante cuyo contenido no puede ser cambiado (!!)

Entonces, ¿cómo vas a insertar una cadena dentro de micad1, si esto implica alterarla? No puedes.

Debes modificar la declaración de micad1, pudiendo quedar más o menos de este modo:

Código C++:
Ver original
  1. char micad1[100];       /* espacio suficiente */
  2.  
  3. strcpy(micad1, "hola");

ahora cad1 no será una cadena constante, y además contendrá el espacio que necesita para lo que quieres hacer. Pruébalo y comenta .....
  #4 (permalink)  
Antiguo 10/02/2014, 19:14
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: error usando cadenas

Lo indicado esta casi bien.

Es cierto que "hola" es un string constante y como tal no se puede modificar, pero al inicializar un arreglo de caracteres con un string constante, el cargador hace la copia para ti, desde la zona constante hacia la variable, gratis.

El string constante existe, y la variable inicializada también. Son 2 entes independientes, usualmente guardados en zonas diferentes de memoria.

Mini.ejemplo:

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    char h[] = "hola que tal";
  7.  
  8.    cout << "ANTES   : " << h << endl;
  9.    h[0] = 'c';
  10.  
  11.    cout << "DESPUES : " << h << endl;
  12. }

Verlo funcionando aqui: http://goo.gl/rWQAy8
__________________
Visita mi perfil en LinkedIn
  #5 (permalink)  
Antiguo 11/02/2014, 10:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: error usando cadenas

muchas gracias a todos, lo pude arreglar de las maneras que me indicaron!

Etiquetas: cadenas, ejercicio, funcion, int, string, usando
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 00:38.