Eventuali duplicati:
How are string literals compiled in C?confronto Indirizzo e stoccaggio stringa
ho scritto il piccolo codice qui sotto. In questo codice, penso che l'indirizzo della prima e della seconda stringa "ciao" verrebbe confrontato. Sono confuso in questo. A prima vista, pensavo che entrambe le stringhe sarebbero state memorizzate nella memoria di sola lettura e avrebbero quindi un indirizzo diverso. Ma "uguale" è stato stampato dopo l'esecuzione.
Quando ho visto l'objdump, non ero in grado di vedere la stringa ciao. Capisco che non ho preso una variabile per memorizzarli, ma dove sarebbe "salvato".
Sarà memorizzato su STACK ?? o Sarà memorizzato nel segmento di codice ??
#include<stdio.h>
int main()
{
if ("hello" == "hello")
printf("\n equal ");
else
printf("\n not equal");
return 0;
}
Quando ho cambiato la condizione if if ("hello" == "hell1")
, "diverso" ha ottenuto stampato. Ancora, dove e come vengono memorizzate le stringhe. Sarà memorizzato su STACK ?? o Sarà memorizzato nel segmento di codice ??
Sarei davvero grato se qualcuno qui mi fornisca una risposta elaborata. Grazie
Se si vede lo smontaggio di questo, si noterà che non esiste affatto un equivalente 'se'! Ottimizzato! –
possibile duplicato di [Una domanda di base: come vengono compilati i valori letterali stringa in C?] (Http://stackoverflow.com/q/6680819/), [Perché "a"! = "A" in C?] (Http : //stackoverflow.com/q/4843640/), [C string letterali: dove vanno?] (http://stackoverflow.com/q/2589949/) – outis