These functions create a Kerberos 5 principal from a realm and a list of components. All of these functions return an allocated principal in the principal parameter, this should be freed with krb5_free_principal after use.
The "build" functions take a realm and the length of the realm. The krb5_build_principal and krb5_build_principal_va also takes a list of components (zero-terminated strings), terminated with NULL. The krb5_build_principal_ext and krb5_build_principal_va_ext takes a list of length-value pairs, the list is terminated with a zero length.
The krb5_make_principal is a wrapper around krb5_build_principal. If the realm is NULL, the default realm will be used.
You can not have a NUL in a component. Until someone can give a good example of where it would be a good idea to have NULs in a component, this will not be fixed.
krb5_425_conv_principal(3), krb5_free_principal(3), krb5_parse_name(3), krb5_sname_to_principal(3), krb5_unparse_name(3)