Se usi sempre la stessa stringa

char cat[size];

e quindi passi sempre lo stesso puntatore alla funzione acquisto, avrai sempre e solo lo stesso dato per la categoria.

Devi allocare dinamicamente la categoria e passare il puntatore alla funzione acquisto.