In generale, questo codice:
for (; *p; ++p) *p = tolower(*p);
fa non
” lavora per abbassare un caso di stringa in C, quando i punti p in una stringa?
funziona per puro ASCII, ma dal momento che char
solito è un tipo di firma, e dal momento che tolower
richiede un argomento non negativo (tranne il valore speciale EOF
), il pezzo sarà, in generale, hanno un comportamento indefinito.
Per evitare che, gettata l'argomento unsigned char
, in questo modo:
for (; *p; ++p) *p = tolower((unsigned char)*p);
Ora si può lavorare per codifiche a singolo byte come Latin-1, a condizione di aver impostato le impostazioni internazionali corrette tramite setlocale
, per esempio setlocale(LC_ALL, "");
. Tuttavia, si noti che la codifica UTF-8 molto comune non è un singolo byte per carattere. Per gestire il testo UTF-8 è possibile convertirlo in una stringa ampia e in caratteri minuscoli.
Particolari:
*p
è un'espressione che denota l'oggetto che p
punti, presumibilmente un char
.
Come condizione di continuazione per il ciclo for
, qualsiasi non zero char
valore *p
denota, ha l'effetto di True logico, mentre il valore zero char
alla fine della stringa ha l'effetto di falso logico, che termina il cappio.
++p
fa avanzare il puntatore del puntatore al successivo char
.
fonte
2015-06-05 07:19:37
Ciao. perché pensi che non dovrebbe funzionare? \ –
Quale parte non capisci? – juanchopanza
Salve, non sono sicuro di come * p possa essere usato come secondo parametro nel ciclo for, e come il loop sa terminare – Dave