Posible duplicado:
¿Por qué aparece un error de segmentación al escribir en una cadena?
int main() { char *c = "abc"; *c = 'd'; printf("%s",c); return 0; }
Cuando intenté ejecutar este progtwig en C, el progtwig se bloquea … ¿Quiero saber cuál es el error aquí?
Debido a que la cadena literal abc
se almacena realmente en un área de solo lectura del proceso y se supone que no debe modificarla. El sistema operativo ha marcado las páginas correspondientes como de solo lectura y obtienes una excepción de tiempo de ejecución para un bash de escribir allí.
Siempre que asigne un literal de cadena a un puntero de caracteres, califíquelo como const
para hacer que el comstackdor le advierta sobre tales problemas:
const char *c = "abc"; *c = 'd'; // the compiler will complain
Si realmente desea modificar una cadena literal (aunque no directamente, sino su copia), sugeriría usar strdup
:
char *c = strdup("abc"); *c = 'd'; // c is a copy of the literal and is stored on the heap ... free(c);
"abc"
es una cadena literal.
*c = 'd'
es un bash de modificar esa cadena literal.
No puedes modificar los literales de cadena.