2009-03-16 10 views

Respuesta

4

No, no debería. "Hola mundo" es un literal de cadena constante, necesita asignar memoria usando malloc() en C, o new en C++ si desea memoria que pueda modificar.

2

Se debe a que está escribiendo en el almacenamiento de una cadena literal, que puede estar en un área protegida de la memoria.

25

char *str = "Hello World"; es una cadena const, y no se puede modificar. El compilador puede ponerlo en una ubicación no grabable, lo que provoca el bloqueo que ve.

Reemplazando la declaración con char str[] = "Hello World"; debe hacer lo que quiera, poniendo la cadena en una matriz modificable en la pila.

+0

Su sugerencia sería idéntico al código actual. –

+0

char str [] versus char * str hace que la cadena sea modificable. – Michael

+0

Aquí hay un par de referencias a esto: http://www.iso-9899.info/wiki/StringsByExample https://www.securecoding.cert.org/confluence/display/cplusplus/STR30-CPP.+Do + no + intento + a + modificar + cadena + literales – Michael

3

Como han señalado otros, las cadenas literales pueden almacenarse en un área de solo lectura de la memoria. ¿Estás compilando con advertencias activadas? Debería recibir una advertencia sobre descartar la constitud del literal de cadena.

Lo que puede hacer en su lugar es:

char *str = strdup("Hello, world!"); 
// Modify the string however you want 
free(str); 
Cuestiones relacionadas