c - C语言中将字符数组拆分为名字、中间名和姓氏,如果中间名为空则跳过中间名

标签 c

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/

相关文章:

c - 每行一个字数

c - 数组的高效索引

计算C中二维数组中每一列的平均值?

c - 寻找最小的整数

c - 值在输出中显示两次(C 编程)

java - 从 C 语言调用 Java 函数

C - 我不想分配我不会使用的内存! (新问题)

c - 如果超时后未完成,如何停止子进程

c - 为什么下面的 C 代码出现段错误?

在运行时检查指针后面的数据以避免段错误 : (wchar_t *) vs. (char *)