asignación dinámica de memoria y strcpy

Iniciado por m@o_614, 5 Junio 2014, 18:53 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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é??

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char *x;
   x= (char*)calloc(10,sizeof(char));
   x = "101010101";
   printf("[%s]\n",x);
   strcpy(x,"hola");
   printf("[%s]\n",x);
   return 0;
}


gracias

Klixz

Que tu int main que de así.

int main(int argc, char **argv)

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

char tuvariable[] ="hola";

char elhacker[]="que pasi colegi";


Y luego para imprimirlos haces esto.

strcpy(tuvariable,elhacker); // llamamos al char

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

Eternal Idol

#2
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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

leosansan

Ahondando en lo que comenta E.I, al hacer:

 
Código (cpp) [Seleccionar]
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.

Como ejemplo:

Citar

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


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
  char *x;
  x = (char*)calloc(10,1);

  strcpy(x,"101010101");
  printf("\nx=strcpy1=[%s]",x);

  strcpy(x,"hola");
  printf("\nx=strcpy2=[%s]",x);

  free(x);
  return 0;
}


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