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

使用此代码但在没有中间名时失败。例如,对于“约翰·亨利·蓝”,而不是为了工作正常,“布拉德·亨利如果在C语言中为空,则跳过中间名

+0

您是否尝试过为每个变量设置默认值?我的意思是,strFirstName,strMiddleName和strLastName在开始时具有NULL值,尝试将它们全部初始化为空字符串,例如“”,因为我认为由于在参数中放置了空值而导致出现错误。 –

+0

它们都被初始化为空字符串。 – Coder

回答

0

与大多数事情一样,它总是测试一个函数的结果以确保它完成了您认为的功能是一个好主意。通过这样做,你也可以解决你的问题。

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'; 
     } 
    } 
    } 

您还可以扩展此更进一步处理您也有2个或更多中间名的情况。

+0

谢谢克里斯,它工作:) – Coder

0

检查token1是空尝试读取姓前:

// 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); 
}