Obtención de falla de segmentación en un pequeño progtwig c

escribí un pequeño prog:

1 #include 2 main(){ 3 char* str = "string"; 4 *str = 'k'; 5 printf("string is = %s\n",str); 6 } 

Este progtwig se comstack sin ningún error o advertencia, pero cuando lo ejecuto, da un error de segmentación. Mientras que si reescribo la tercera línea como: char str [] = “string”; este progtwig funciona perfectamente bien ¿Alguien puede por favor dejarme saber cuál es el problema aquí? ¿Cuál es la diferencia entre estas dos formas diferentes de escribir la tercera línea? Cualquier ayuda será apreciada. Gracias.

 char * str = "string"; 

declara un puntero que apunta a un área de memoria donde se almacena la cadena "string" ; es un comportamiento indefinido escribir en esta área de la memoria, y generalmente resulta en un locking.

En su lugar, debe utilizar:

 char str[]="string"; 

que declara una cadena local a su función, que se inicializa con el valor "string" . Como la memoria que está utilizando para esta cadena es local para su procedimiento, puede modificarla como desee.

 char* str = "string"; 

Esto pone la cadena en la memoria de sólo lectura. Es un comportamiento indefinido (generalmente un comportamiento desagradable) cuando intenta modificarlo con la siguiente línea. Intenta algo como

 char str[] = "string"; 

en lugar.

 I also executed the given code.. 1 #include 2 main(){ 3 char* str = "string"; 4 *str = 'k'; 5 printf("string is = %s\n",str); 6 } But there is no such error. Following output is shown.... String is=Ktring A segmentation fault, bus error, or access violation is generally an attempt to access memory that the CPU cannot physically address. So in my opinion it's completely depends on execution. thanks...