2012-03-31 12 views
5
char **s = &"Is this valid?"; 

È possibile ottenere l'indirizzo a cui è memorizzato l'indirizzo di una stringa letterale in C? So che la stringa letterale è memorizzata nel datasegment .rodata. Tuttavia, ottenere l'indirizzo di quell'indirizzo non ha senso.Indirizzamento dell'indirizzo di una stringa letterale in C

Va notato che gcc compila questo e produce un eseguibile funzionante.

+2

Non con '-Wall -Werror'. –

risposta

7

Il tuo esempio non è valido:

char **s = &"Is this valid?"; // Not valid, wrong type 

Questo è valido:

char (*s)[15] = &"Is this valid?"; // OK 

Il tipo di "Is this valid?" è char[15]. Il tipo di puntatore a un array 15 di char è char (*)[15]. Quindi il tipo di &"Is this valid?" è char (*)[15].

Il tipo di stringa letterale è char[N+1] dove N è la lunghezza della stringa.

2

Il tipo di &"Is this valid?" è char (*)[15] (cioè un puntatore a una lunghezza 15 array di char).

Il tuo codice non è valido, in quanto GCC ti dirà se si compila con -Wall.

Problemi correlati