Наверное, вам только в С++ будет сухо и комфортно :) Там ведь есть переопределение операций хотя из чисто прагматических соображений ваше упорство непонятно.
Я бы сразу сделал
void FillStruct (struct tag *p, char var1...)
{
p->... = var1;
p->...
}
и двигался дальше