2016-04-17 5 views
0

Ich habe einige Probleme bei der Verwendung von strtok_s. Im folgenden Code enthält read_data die Zeichenfolge:Warum gibt strtok_s nach der ersten Verwendung 0x00000001 zurück?

BEGIN_TRANSACTION CHANGE_0 PUT(debit_account,dbvalue.new)PUT(debit_account,dbvalue.new) CHANGE_0 PUT(credit_account,crvalue.new)PUT(credit_account,crvalue.new) OUTCOME_COMMITTED_0 END_TRANSACTION_0 

Unten ist mein Code:

char *delim = " "; 
char* next_token; 
line[0] = strtok_s(read_data, delim, &next_token); 
while (line[i] = strtok_s(NULL, delim, &next_token) != NULL) 
{ 
    i++; 
} 

Nach der Ausführung nur line[0] enthält korrekte Zeichenfolge "BEGIN_TRANSACTION". Alle anderen line[i] enthält "0x00000001". Ich habe online nachgeschlagen, aber ich kann hier keine Lösung finden. Jede Hilfe wird geschätzt.

Hinweis: Ich bin mit Visual Studio 2010

Antwort

5
while (line[i] = strtok_s(NULL, delim, &next_token) != NULL) 

Die obige Zeile sollte wie unten dargestellt werden. Beachten Sie die Klammern.

while ((line[i] = strtok_s(NULL, delim, &next_token)) != NULL) 

Zur Erklärung: Der ursprüngliche while Zustand aufgrund des Betreibers der Rangfolge nicht korrekt ist. Es entspricht:

line[i] = (strtok_s(NULL, delim, &next_token) != NULL) 

Was bedeutet, dass sie das Ergebnis des Vergleichs der strtok_s Rückgabewert NULL nimmt und ordnet das zu line[i]. Aus diesem Grund erhalten Sie 1 für line[i] (außer der letzte Eintrag sollte 0 sein).

Verwandte Themen