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
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
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.
Ahondando en lo que comenta E.I, al hacer:
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)
#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! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)