¿Cómo se comstackn los literales de cuerdas en C? Según mi entendimiento, en la prueba 1, la cadena “hola” se coloca en el segmento de datos por comstackdor y en la segunda línea p se asigna esa dirección virtual codificada. ¿Es esto correcto? y que no hay una diferencia básica entre cómo funciona test1 y cómo funciona test2.
Algún código:
#include test1(); test2(); test3(); main() { test1(); test2(); //test3(); } test1() { char *p; p="hello"; } test2() { char *p="hello"; } test3() { char *p; strcpy(p,"hello"); }
Cualquier referencia del estándar C será muy apreciada, de modo que pueda entender esto en profundidad desde el punto de vista del comstackdor.
Desde el punto de vista estándar de C, no hay ningún requisito en particular acerca de dónde se colocará la cadena literal. Los únicos requisitos sobre el almacenamiento de literales de cadena se encuentran en C99 6.4.5 / 5 “literales de cadena”:
"hello"
en su ejemplo pueden o no tener la misma dirección. No se puede contar con ningún comportamiento. Su comprensión es correcta, los datos de “Hola” se colocarán en un segmento RO y su dirección virtual relativa se asignará a los punteros en las funciones testX ().
Sin embargo, esas son perspectivas específicas del comstackdor, el estándar C no se preocupa por ellas.
EDIT: Según test3 (), vea el comentario de τεκ.