token1 = strtok(udtAddressVar.strName, " ");
strcpy(udtAddressVar.strFirstName, token1);
token1 = strtok(NULL, " ");
strcpy(udtAddressVar.strMiddleName, token1);
token1 = strtok(NULL, " ");
strcpy(udtAddressVar.strLastName, token1);
使用此代码,但当没有中间名时会失败。例如,适用于“John Henry Blue”,但不适用于“Brad Henry”
最佳答案
与大多数事情一样,测试函数的结果以确保它完成了您认为的功能始终是个好主意。通过这样做,您也可以解决您的问题。
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 个或更多中间名的情况。
关于c - C语言中将字符数组拆分为名字、中间名和姓氏,如果中间名为空则跳过中间名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42952091/