tok_val::tok_val(char* pp)
  {
      if (strlen(pp) <= 8) { // короткая строка tag="N" strncpy(v,pp,8); // скопировать 8 символов } else { // длинная строка tag="S" p="pp;" // просто сохранить указатель } } 
Тип tok_val можно использовать так:
  void f()
  {
      tok_val t1("short");        // короткая, присвоить v
      tok_val t2("long string");  // длинная строка, присвоить p
      char s[8];
      strncpy(s,t1.id(),8);       // ok
      strncpy(s,t2.id(),8);       // проверка check() не пройдет
  }