è probabile (ste stringhe C mi stanno facendo dannare, mi ero abituato alla comodità di "string" di C++ ), però come mai allora viene stampata per bene? Che errori potrei aver fatto?

comunque vediamo un po':
codice:
int un_intero;
char * buff;
char altra_stringa[1024], altra_stringa2[25], n[7];
//...
strcpy(altra_stringa, "valore_uno\0");

strcpy(altra_stringa2, "valore_due\0");
sprintf(n, "%i", un_intero);
n[6] = '\0';
strcat(altra_stringa2, n);

//...

buff = malloc(strlen(...)+...); // alloco spazio per le stringhe che dovrò concatenarci, sovradimensionando un po'

if(buff == NULL) /* errore allocazione*/;

// confeziono in buff una stringa, che mi serve per un'altra cosa. Lo riporto perchè ho paura che sia per questi rigiri vari che faccio su buff che qualcosa va storto...
// buff è una var che uso diverse volte anche in altri punti della funzione per operazioni su stringhe e con la memoria dinamica)
strcpy(buff,"stringa1 \0");
strcat(buff, altra_stringa);
strcat(buff, "stringa2\0");
// <uso la stringa così costruita>

// ora voglio riusare buff per costruire la stringa che da problemi

strcpy(buff, altra_stringa_2);
strcat(buff, "/\0");
strcat(buff, altra_stringa);
strcat(buff, "valore_3\0");

printf("%s \n", buff); // stampata correttamente
ret = stat(buff, &info); // ritorna -1, errno: No Such File or Directory

free(buff);
(scusate per questa ignobile porcheria)