Ho un TCHAR e valore come di seguito:Come posso substring un TCHAR
TCHAR szDestPathRoot[MAX_PATH]="String This";
Ora voglio il primo di tre caratteri da TCHAR, come di seguito:
szDestPathRoot.substring(0,2);
Come posso fare questo .
Ho un TCHAR e valore come di seguito:Come posso substring un TCHAR
TCHAR szDestPathRoot[MAX_PATH]="String This";
Ora voglio il primo di tre caratteri da TCHAR, come di seguito:
szDestPathRoot.substring(0,2);
Come posso fare questo .
TCHAR[]
è un semplice array terminazione Null (piuttosto che una classe C++). Di conseguenza, non esiste un metodo ".substring()".
TCHAR[]
(per definizione) può essere una stringa di caratteri ampia (Unicode) o una stringa di caratteri semplice (ASCII). Ciò significa che esistono wcs
e str
equivalenti per ciascuna funzione di stringa (wcslen()
rispetto a strlen()
, ecc. Ecc.). E un equivalente agnostico, in fase di compilazione, TCHAR
che può essere/o.
L'equivalente TCHAR
di strncpy()
è tcsncpy()
.
avvertimento finale: per dichiarare un TCHAR
letterale, è meglio utilizzare il _T()
macro, come mostrato nel seguente frammento di codice:
TCHAR szDestPathRoot[MAX_PATH] = _T("String This");
TCHAR szStrNew[4];
_tcsncpy (str_new, szTestPathRoot, 3);
Si possono trovare questi collegamenti per essere di interesse:
'TCHAR' non è un tipo di array. – dreamlax
Questo è un po brutto, ma se si sa per certo che:
Si può solo mettere un NUL termina al 4 ° posizione per fare lungo il char stringa di 3.
szDestPathRoot[3] = _T('\0');
Si noti che questa operazione è distruttivo per la stringa originale
Si dovrebbe davvero utilizzare un classe string in C++ di codice però.
@Alexandre Jasmin, non capisco come fa questa sottostringa szDestPathRoot. Ho bisogno di Str dall'assegnazione precedente – Simsons
@Subhen: Ha un bug (dovrebbe essere posizionato il NULL nella posizione 4), ma ciò che fa è limitare la lunghezza della stringa al numero x-1 di caratteri. Il codice posiziona il carattere di fine stringa (NULL) nella posizione tre, e quindi la lunghezza della stringa in questione diventa due. –
@Billy ONeal s [0] = 'S'; s [1] = T '; s [2] = 'R'; s [3] = '\ 0'. Conto tre caratteri. –
TCHAR szDestPathRoot[MAX_PATH]="String This";
TCHAR substringValue[4] = {0};
memcpy(substringValue, szDestPathRoot, sizeof(TCHAR) * 3);
@Blindy: memcpy è un metodo ansi c che accetta un const come secondo parametro. Come fa a distruggere la stringa originale? – tidwall
Come avete etichettato tua domanda con "C++" è possibile utilizzare le classi stringa della biblioteca std:
std::wstring strDestPathRoot(_T("String This"));
strDestPathRoot.substr(0, 2);
Ciao, è necessario utilizzare 'MAX_PATH + 1' per evitare overflow. – Benoit
@Benoit: 'MAX_PATH' è 260, che include la lunghezza di terminazione nulla. (La lunghezza massima del percorso supportato è di 255 caratteri) Vedere http://msdn.microsoft.com/en-us/library/aa365247.aspx –
La stringa letterale deve essere racchiusa nella macro '_T()'. Ciò lo renderà un vero e proprio string letterale nelle build unicode. –