Differenze tra le funzioni stringa

In questo argomento vengono descritte le differenze tra le funzioni stringa usate per la gestione delle informazioni sui set di caratteri e Unicode. Queste funzioni includono implementazioni della tabella codici Unicode e Windows per supportare i parametri della tabella codici Unicode e Windows.

Le funzioni stringa seguenti non richiedono un commento speciale. Le implementazioni della tabella codici Unicode e Windows funzionano in modo identico.

Il valore di lunghezza recuperato da una delle funzioni di lunghezza stringa è sempre basato sulla larghezza normale dei caratteri: 8 bit per le tabelle codici di Windows, 16 bit per Unicode. Questo valore viene spesso definito "conteggio di caratteri". Questo termine è strettamente corretto perché le tabelle codici di Windows che usano set di caratteri a byte doppio (DBCS) hanno alcuni caratteri a larghezza intera che sono effettivamente rappresentati da due byte consecutivi. Si verifica una situazione simile per i surrogati in Unicode.

Le funzioni stringa seguenti sono sensibili alle impostazioni locali del thread corrente, derivate dalla lingua selezionata dall'utente nel Pannello di controllo. Le funzioni lstrcmp e lstrcmpi non eseguono confronti di byte come i nomi ANSI, ad esempio strcmp. Confrontano invece le stringhe in base alle regole delle impostazioni locali.

Le funzioni seguenti consentono di eseguire la conversione tra il set di caratteri OEM e la tabella codici di Windows corrente o Unicode, a seconda della versione usata:

Le funzioni di stampa, ad esempio StringCbPrintf, supportano Unicode fornendo i tipi di dati nuovi e modificati seguenti nelle specifiche di formato. Queste specifiche di formato influiscono sul modo in cui le funzioni interpretano il parametro di input corrispondente.

Specifica del formato Tipo di dati per la versione della tabella codici di Windows Tipo di dati per la versione Unicode
c CHAR WCHAR
C WCHAR CHAR
hc, hC CHAR CHAR
hs, hS LPSTR LPSTR
lc, lC WCHAR WCHAR
ls, lS LPWSTR LPWSTR
s LPSTR LPWSTR
S LPWSTR LPSTR

 

Il tipo di dati per il testo di output dipende sempre dalla versione della funzione. Quando il tipo di dati del parametro di input e il tipo di dati del testo di output non sono d'accordo, la funzione di stampa esegue una conversione da Unicode alla tabella codici di Windows corrente o viceversa, come richiesto.

Per la versione Unicode delle funzioni di stampa, la stringa di formato è Unicode, così come il testo di output.

Attenzione

La gestione del buffer insufficiente è implicata in molti problemi di sicurezza che comportano sovraccarichi del buffer. Vedere Informazioni di riferimento su Strsafe.h. Le funzioni definite in Strsafe.h forniscono un'elaborazione aggiuntiva per la gestione corretta del buffer nel codice. Per questo motivo, sono destinati a sostituire le controparti C/C++ predefinite e specifiche implementazioni di Microsoft Windows. Per altre informazioni, vedere Considerazioni sulla sicurezza: Funzionalità internazionali.

 

Unicode nell'API Windows