Một cách là bạn có thể đểm từ 0 tới khoảng trắng đầu tiên để xác định kích thước cần malloc(), cách khác là dùng strtok() để tách Nguyen Van A thành "Nguyen", `"Van", "A" rồi in ra cái đầu tiên.
#include <stdio.h>
#include <stdlib.h>
static const int N = 512;
static char *nhap_ten()
{
  char *ten = (char *) malloc(N * sizeof(char));
  gets(ten); // gets() để dễ minh họa
  
  return ten;
}
static char *tach_ho(char *ten)
{
  int i = 0;
  for (; i < strlen(ten); ++i)
  {
    if (ten[i] == ' ')
    {
      char *ho = (char *) malloc((i + 1) * sizeof(char));
      memcpy((char *) ho, (char *) ten, i);
      ho[i] = 0;
      
      return ho;
    }
  }
  
  return "?";
}
int main()
{
  char *ten = nhap_ten();
  char *ho = tach_ho(ten);
  
  printf("ten = %s; ho = %s\n", ten, ho);
  
  free(ten);
  free(ho);
}
Chương trình đơn giản thì 1 lần malloc() rồi free() thôi, quản lý bộ nhớ là một thứ lằng nhằng.