Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 5 Junio 2014, 18:53 pm



Título: asignación dinámica de memoria y strcpy
Publicado por: m@o_614 en 5 Junio 2014, 18:53 pm
Saludos

Tengo un pequeño código en el cual le asigno memoria a un puntero dinamicamente, despues le asigno unos valores y los imprimo, el problema lo tengo en el strcpy que se supone que le tiene que asignar la cadena "hola" al puntero, pero el programa truena y no entiendo por qué??

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    char *x;
  8.    x= (char*)calloc(10,sizeof(char));
  9.    x = "101010101";
  10.    printf("[%s]\n",x);
  11.    strcpy(x,"hola");
  12.    printf("[%s]\n",x);
  13.    return 0;
  14. }

gracias


Título: Re: asignación dinámica de memoria y strcpy
Publicado por: Klixz en 5 Junio 2014, 19:08 pm
Que tu int main que de así.

Código
  1. int main(int argc, char **argv)

Y luego en el char crees la variable, luego con strcpy & printf imprimes.

Código
  1. char tuvariable[] ="hola";
  2.  
  3. char elhacker[]="que pasi colegi";

Y luego para imprimirlos haces esto.

Código
  1. strcpy(tuvariable,elhacker); // llamamos al char
  2.  
  3. printf("%s\n",tuvariable);// ahora imprimimos


que no se te olvide el return 0;

Cuídate, y si tienes alguna duda me avisas por MP o comenta tema


Título: Re: asignación dinámica de memoria y strcpy
Publicado por: Eternal Idol en 5 Junio 2014, 19:32 pm
En la linea 9 estas asignandole a x la direccion de memoria donde se encuentra la cadena "101010101" (ademas eso genera un memory leak, la memoria antes reservada no fue liberada y no hay mas referencias a ella) por eso despues cuando intentas escribir sobre la cadena da error, seguro que la misma esta en la sección de datos de solo lectura.



Klixz: lee las preguntas con atencion por favor.


Título: Re: asignación dinámica de memoria y strcpy
Publicado por: leosansan en 5 Junio 2014, 22:42 pm
Ahondando en lo que comenta E.I, al hacer:

  
Código
  1. x = "101010101";

al tratarse de una cadena de caracteres constantes no podrás modificarla a posteriori, de ahi que al intentarlo con strcpy el programa cruja. Para ello, para modificar el valor del puntero, tendría que "apuntar" a una dirección que no sea una constante, como un array.

El resultado que quieres obtener te lo puede proporcionar curiosamente lo mismo que te daba problema:strcpy (http://www.cplusplus.com/reference/cstring/strcpy/).

Como ejemplo:

Citar

x=strcpy1=[101010101]
x=strcpy2=[hola]
Process returned 0 (0x0)


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6.  char *x;
  7.  x = (char*)calloc(10,1);
  8.  
  9.  strcpy(x,"101010101");
  10.  printf("\nx=strcpy1=[%s]",x);
  11.  
  12.  strcpy(x,"hola");
  13.  printf("\nx=strcpy2=[%s]",x);
  14.  
  15.  free(x);
  16.  return 0;
  17. }

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)