Newsgroup: it.comp.lang.c
Titolo: A proposito di stringhe...

Salve,
vorrei avere un chiarimento riguardante l'assegnazione di stringhe
(credo che si chiamino string-literal). Considerando questo pezzo di
codice:
void	pippo(void)	{
	char	*str1;
	{
		char	*str2;
		str2 = "Stringa";
		str1 = str2;
		putc(*str);
	}
	putc(*(str1+1));
}
dopo l'istruzione putc(*str), viene chiuso il blocco dove c'e' stata la
dichiarazione  di str2, e quindi la variabile str2 viene automaticamente
deallocata; ma viene deallocata anche la memoria occupata da "Stringa", 
oppure l'ultima istruzione putc(*(str1+1)) stampa effettivamente su
schermo una 't' ?
Grazie per l'attenzione.
-- 
Fabio Costa a.k.a. Ph0ton
--------------------------------------------------------------------
  Referente AGI - Sezione di Milano   Impaginatore capo di AmiWorld 
  Membro del MusicPlanet Musicgroup       (
http://amiga.eden.it
)    
     (
games.eden.it/musicplanet
)           Musician dei Genesis     
--------------------------------------------------------------------

Credo che il comportamento sia indevinito. Cioe' potrebbe
stampare 't', ma non e' dovuto su tutti i sistemi. Il
dubbio si scioglie verificando sul documento dello standard
se le costanti stringa hanno classe di memorizzazione
const char *
o
static const char *
Io credo che sia il primo caso e che quindi non sia dovuto
che la 't' sia stampata. Non significa che non la vedrai su
alcuni sistemi, ma semplicemente che i progettisti di compilatori
o sistemi operativi non sono tenuti a garantirti il comportamento.
ciao.
Roberto.
Fabio Costa ha scritto:
+ 
+ Salve,
+ vorrei avere un chiarimento riguardante l'assegnazione di stringhe
+ (credo che si chiamino string-literal). Considerando questo pezzo di
+ codice:
+ 
+ void    pippo(void)     {
+         char    *str1;
+         {
+                 char    *str2;
+                 str2 = "Stringa";
+                 str1 = str2;
+                 putc(*str);
+         }
+         putc(*(str1+1));
+ }
+ 
+ dopo l'istruzione putc(*str), viene chiuso il blocco dove c'e' stata
la
+ dichiarazione  di str2, e quindi la variabile str2 viene
automaticamente
+ deallocata; ma viene deallocata anche la memoria occupata da
"Stringa",
+ oppure l'ultima istruzione putc(*(str1+1)) stampa effettivamente su
+ schermo una 't' ?
+ 
+ Grazie per l'attenzione.
+ 
+ --
+ Fabio Costa a.k.a. Ph0ton
+ --------------------------------------------------------------------
+   Referente AGI - Sezione di Milano   Impaginatore capo di AmiWorld
+   Membro del MusicPlanet Musicgroup       (
http://amiga.eden.it
)
+      (
games.eden.it/musicplanet
)           Musician dei Genesis
+ --------------------------------------------------------------------

 deallocata; ma viene deallocata anche la memoria occupata da "Stringa",
No, le string-literal hanno classe di allocazione statica e non vengono
quindi mai rilasciate.
EMG

grazie anche da parte mia.
roberto.

Enrico Maria Giordano wrote:

Ah, ok, perfetto! Grazie mille! (grazie comunque anche a ziofester!)
-- 
Fabio Costa a.k.a. Ph0ton
--------------------------------------------------------------------
  Referente AGI - Sezione di Milano   Impaginatore capo di AmiWorld 
  Membro del MusicPlanet Musicgroup       (
http://amiga.eden.it
)    
