2017-03-22 4 views
0
token1 = strtok(udtAddressVar.strName, " "); 
strcpy(udtAddressVar.strFirstName, token1); 
token1 = strtok(NULL, " "); 
strcpy(udtAddressVar.strMiddleName, token1); 
token1 = strtok(NULL, " "); 
strcpy(udtAddressVar.strLastName, token1); 

diesen Code verwenden, aber es schlägt fehl, wenn es keinen Mittelweg Name ist. Zum Beispiel arbeitet für ‚John Henry Blue‘ fein und nicht für ‚Brad Henry‘Split char-Array als Vorname, zweiter Vorname und Nachname, überspringen zweiter Vorname, wenn seine leer in der Sprache C

+0

Haben Sie versucht, einen Standardwert für jede Variable festzulegen? Ich meine, StrFirstName, StrMiddleName und StrLastName im Anfang hat NULL-Werte, versuchen Sie, alle von ihnen zu einer leeren Zeichenfolge wie "" zu initialisieren, weil ich denke, dass Sie einen Fehler erhalten, weil Sie eine Null in den Parameter setzen. –

+0

Sie werden alle als leere Zeichenfolgen initialisiert. – Coder

Antwort

0

Wie bei den meisten Dingen, ist es immer eine gute Idee, um die Ergebnisse einer Funktion zu testen, um sicherzustellen, dass es getan ist, was Sie denken, dass es hat. Und damit können Sie auch Ihr Problem lösen.

token1 = strtok(udtAddressVar.strName, " "); 
if(token1) 
    { 
    strcpy(udtAddressVar.strFirstName, token1); 
    token1 = strtok(NULL, " "); 
    if(token1) 
    { 
    strcpy(udtAddressVar.strMiddleName, token1); 
    token1 = strtok(NULL, " "); 
    if(token1) 
     { 
     strcpy(udtAddressVar.strLastName, token1); 
     } 
    else 
     { 
     strcpy(udtAddressVar.strLastName, udtAddressVar.strMiddleName); 
     *udtAddressVar.strMiddleName='\0'; 
     } 
    } 
    } 

Sie könnten dies auch noch erweitern, um den Fall zu behandeln, in dem Sie auch zwei oder mehr Vornamen haben.

+0

Danke Chris, es hat funktioniert :) – Coder

0

Überprüfen Sie, ob token1, bevor Sie den Namen lesen null ist:

// get the first token 
token1 = strtok(udtAddressVar.strName, " "); 
strcpy(udtAddressVar.strFirstName, token1); 

// middle name 
token1 = strtok(NULL, " "); 
strcpy(udtAddressVar.strMiddleName, token1); 

// Check if the last name exists 
if (token1 == NULL) { 
    udtAddressVar.strLastName = udtAddressVar.strMiddleName; 
    udtAddressVar.strMiddleName = ""; 
} 
// get the last name 
else { 
    token1 = strtok(NULL, " "); 
    strcpy(udtAddressVar.strLastName, token1); 
} 
0
token1 = strtok(udtAddressVar.strName, " "); 
strcpy(udtAddressVar.strFirstName, token1); 
token2 = strtok(NULL, " "); 
token3 = strtok(NULL, " "); 
if (token3) { 
    strcpy(udtAddressVar.strMiddleName, token2); 
    strcpy(udtAddressVar.strLastName, token3); 
} else { 
    udtAddressVar.strMiddleName[0] = '\0'; 
    strcpy(udtAddressVar.strLastName, token2); 
} 
Verwandte Themen