Originariamente inviato da skyboy85
1) in char nome1[] dove specificare una dim??? ad esempio 20???
Sì, ma nome1 deve essere di dimensioni tali da poter contenere tutto quello che ci accoderai.
Tra parentesi, tra il dichiarare nome1 come char* e come char[] c'è comunque una differenza: nel primo caso accade quello che ti ho detto, nel secondo, invece, viene effettivamente creato un array nello stack (non nella tabella delle stringhe) di dimensioni determinate dal compilatore in base alla stringa con cui lo inizializzi.
2) n1 devova essere dichiarata come char n1[]???
Non saprei, visto che non conosco la itostring (non è standard).
dalla documentazione di strcat ho visto i prototipi:

char *strcat ( char *s1, const char*s2)
oppure
char *strcat(char dest[], char *sorg);

a quale mi devo riferire???
Sono identici (char[] e char * in una chiamata a funzione sono la stessa cosa, ossia un puntatore a char). In ogni caso per evitare buffer overrun ti consiglio di utilizzare la strncat, così da essere sicura di non superare le dimensioni dell'array.
codice:
strncat(nome1, n1, sizeof(nome1)-strlen(nome1)-1);
strncat(nome1, nome2, sizeof(nome1)-strlen(nome1)-1);
nome1[sizeof(nome1)-1]=0;
in entrambi i casi la funzione restituisce un puntatore a dest o s1 quindi un' istruzione di questo tipo è lecita:

q->richfd=open(nome1,O_RDWR|O_CREAT,S_IRUSR|S_IWUS R)
Non vedo il collegamento tra le due cose... :master: