Newsgroup: it.comp.lang.c++
Titolo: String e array di char

Qualcuno sarebbe così gentile da valutare il mio esercizio? Oltre al mio
"Giusto" o "Sbagliato" vorrei sapere se la mia motivazione è giusta.
Quali dei seguenti assegnamenti sono sbagliati?
(a) char ch = "Ciao mi chiamo Luigi"; // Sbagliato perché ch si deve
dereferenziare (*ch);
(b) int ival = &ch; // Sbagliato perché ival non é un puntatore
(c) char *pc = &ival;  // Sbagliato perch, char e int non sono compatibili
(d) string st (&ch);  // Giusto perché le stringhe della classe <string>
supportano l'inizializzazione con altre stringhe
(e) pc = 0; // Giusto, perché in questo modo inizializzo il puntatore a 0
(f) st = pc; // Giusto per lo stesso motivo di (d)
(g) ch = pc[0]; // Giusto perché con pc[0] assegno a ch l'oggetto puntato da
*pc;
(h) pc = st;  // Sbagliato perché non si può convertire esplicitamente una
string in una stringa stile C. Doveva essere const char *pc = st.c_str();
(i) pc = '0'; // No perché pc é un puntatore
(j) st = &ival;  // No, perché stringhe e interi non sono compatibili
(k) ch = *pc; // Si, perché pc punta a un char
(l) *pc = ival; // Si, perché interi e char sono compatibili
Ma qual'è il range di un char?
Grazie in anticipo
Luigi
-- 
Posted from [195.223.215.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ma qual'è il range di un char?
Dipende dalle implementazioni e da quanti bit e' formato un byte.
Generalmente, se una piattaforma mette a disposizioni i char come
signed, allora il range e' da -128..+127.
Altrimenti, se sono unsigned, da 0 a 255.
--
Andrea Laforgia (ICQ 87230455)
"A C program's trick is sometimes a C++ program's trap"
                                          [S.B.Lippman]

 Ma qual'? il range di un char?
su i386 8bit, quindi da 0 a 256 (unsigned) o da -127 a 127 (signed)
la dimensione del char e' stata oggetto di (feroci) discussioni (su
it.comp.lang.c) e mi rimane ancora qualche dubbio, btw da quello che ho
capito e' architecture dependent
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
Non ho ancora capito se il mio cane e' maschio o femmina:
quando fa la pipi' si chiude in bagno

capito e' architecture dependent
La dimensione dei char e' dipendente dall'implementazione, cosi' come
la natura signed o unsigned.


 sarebbe corretto scrivere st=ival;
Sarebbe corretto soltanto perchè c'è una conversione implicita da int a
char, e viene quindi applicato std::string::operator=(char). Assegnare
volutamente un int a uno string è un'operazione un po' bizzarra, però.
Max

 inizializzare un char*.
Però il "const" c'era e il mio commento è perfettamente fuori luogo.
M

 non si corre ALCUN rischio.
e se p puntava ad un'area di memoria precedentemente allocata e non
abbastanza grande per contenere la stringa?
ciao
Kronos
-- 
Home: 
http://kronoz.tsx.org
Runtime error 6D at f000:a12f : user incompetente

abbastanza grande per contenere la stringa?
Non ha importanza a che zona di memoria punti p (se sia grande/piccola
o meno). Con l'assegnazione, lo si fa puntare a una nuova zona. In
questo caso si avrebbe un "memory leak", perche' perderesti la
possibilita' di deallocare la vecchia zona di memoria allocata.
-- 
Andrea Laforgia (ICQ# 87230455) ---------------------------
Non scrivetemi in privato, se non richiesto espressamente.
No replies in private e-mail, unless explicitly requested.
----------------------------------------------------------

 la natura signed o unsigned.
io sapevo che
sizeof( char)
dovrebbe sempre restituire 1, è il range che è dipendente
dall'implementazione. Sapevo male?

dall'implementazione. Sapevo male?
No. Ma 1 e' 1 byte.
La lunghezza del byte puo' variare da implementazione a
implementazione.
