Per debbelandia: ma dico, CRISTO, pensaci 100000000000 volte prima di sparare stronzate che non c'entrano nulla... E cmq quella non è una vera costante, è solo una sostituzione di testo in fase di precompilazione (effettuata quindi dal preprocessore).
Per lucasp:
intendovo dire di sostituire <dicidi tu> con la dimensione della char
Ehm...questo l'avevo capito, ma quell'assegnazione non è corretta... In quel caso devi usare una funzione come strcpy. Ecco una versione funzionante del programma:
codice:
const int Dim = <decidi tu>;
char a[ Dim ];
strcpy( a, "L \' a" );
Sarebbe stato corretto anche questo:
codice:
const int Dim = <decidi tu>;
char a[ Dim ] = "L \' a";
Questo perché a = "L \' a" significa assegnare un puntatore (char*) alla base di un array (char[]), che in sostanza è un puntatore costante. Tu con quell'istruzione (parlo di quella tua sbagliata) stai in pratica tentando di spostare l'indirizzo di memoria da dove parte quell'array, dato che una stringa fra "" altro non è che un puntatore alla zona di memoria in cui tale stringa viene memorizzata. Se tale azione la compi al momento dell'inizializzazione, ha però diverso significato:
codice:
char numeri[ 7 ] = { 1, 2, 3, 4, 5, 6, 7 };
char stringa[ 12 ] = { 'B', 'u', 'o', 'n', 'g', 'i', 'o', 'r', 'n', 'o', '!', '\0' };
char stringaLeggibile[ 12 ] = "Buongiorno!";
Una stringa si potrebbe inizializzare esattamente come si inizializza un array di numeri (vedi l'array 'numeri'). In effetti l'inizializzazione di 'stringaLeggibile' è uguale a quella di 'stringa', ma C e C++ permettono una sintassi (l'inizializzazione con le "") che come avrai notato è molto più leggibile (parlo di 'stringaLeggibile')! In pratica fa la stessa identica cosa che io faccio manualmente con 'stringa': assegna, uno per uno, i caratteri che compongono la stringa (più il carattere nullo per terminarla, '\0') ai singoli elementi dell'array, cioè ai singoli caratteri della stringa. E questo è proprio quello che fa anche strcpy.
Ora ti faccio un ultimo esempio:
codice:
char* a;
a = "L \' a";
Questo è corretto, ma ha un diverso significato. Il programma in questione inizializza una zona di memoria (statica) del programma memorizzandovi la generica stringa "L \' a". Poi l'assegnazione non fa una copia della stringa, ma fa puntare 'a' alla zona di memoria in cui quella stringa è stata memorizzata.
Capito?
Credo di essere stato sufficientemente esauriente in proposito...o no?
Per asp.net=cfm=xml: ho individuato il problema, lucasp ha svagato moltissimo...
Quella L di fronte a 'A' significa che quel carattere è inteso come un carattere esteso, cioè a doppio byte (16 bit). Per ora lascia stare queste peculiarità che, in questa fase, ti interessano ben poco... Se il libro forza proprio sul 'wchar_t' dall'inizio e non sul 'char', beh, forse non è un libro troppo razionale nelle spiegazioni o semplicemente non un libro con cui iniziare... Per quello che vuoi fare tu ti basta questo:
Quindi dimentica 'wchar_t' e quella L davanti. :tongue:
A risentirci.
C ruleZzZ