2016-05-14 10 views
3

Wie kann ich einen TCHAR in andere Variablen aufteilen? Beispiel:C - Split TCHAR

TCHAR comando[50], arg1[50], arg2[50]; 
Mensagem msg; 
_tcscpy(msg.texto, TEXT("MOVE 10 12")); 

So hat msg.texto die Zeichenfolge "MOVE 10 12" und ich möchte die Variable comando [50] "MOVE", die Variable arg1 zu sein "10" und die Variable arg2 sein um "12" zu sein. Wie kann ich das machen? Sorry für einige mögliche englische Fehler. Vielen Dank im Voraus!

GELÖST:

TCHAR *pch; 
    pch = _wcstok(msg.texto, " "); 
     _tcscpy(comando, pch); 
     pch = _wcstok(NULL, " "); 
     _tcscpy(arg1, pch); 
     pch = _wcstok(NULL, " "); 
     _tcscpy(arg2, pch); 
+0

Was ist 'TCHAR' in Ihrem System? Ein 'char' zum Beispiel? – gsamaras

+0

https://msdn.microsoft.com/en-us/library/office/cc842072.aspx – user3088049

Antwort

1

Für TCHAR Sie strtok, wie in diesem Beispiel verwenden:

#include <stdio.h> 
#include <string.h> 

typedef char TCHAR; 

int main() 
{ 
    TCHAR str[] ="MOVE 10 12"; 
    TCHAR * pch; 
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str," "); 
    while (pch != NULL) 
    { 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " "); 
    } 
    return 0; 
} 

Falls es sich um eine wchar_t, dann könnten Sie wcstok():

wchar_t * wcstok (wchar_t * strToken, const wchar_t * strDelimit );

+0

Wie ich mich erinnere, 'TCHAR' kann entweder' char' oder 'wchar_t' - häufiger letztere. 'strtok' funktioniert nicht bei Arrays von' wchar_t'. (Ich erinnere mich nicht, ob es eine entsprechende Funktion gibt, die auf breiten Strings funktioniert.) –

+0

@KeithThompson danke, dass du deinen Downvote gerechtfertigt hast. Viele Leute nicht! Bitte beachten Sie die Kommentare unter der Frage, in der ich das OP danach gefragt habe. Er antwortete mit diesem [link] (https://msdn.microsoft.com/en-us/library/office/cc842072.aspx). Wenn Sie jedoch vorschlagen möchten, wie ich meine Antwort verbessern könnte, lassen Sie es mich bitte wissen! – gsamaras

+0

@gsmaras danke für deine Hilfe, aber das funktioniert nicht. – user3088049