skonvols2k ha scritto:
e se invece la stringa è inizializzata fixed (tipo char str[50]
Se il tuo codice fosse del tipo:
Codice: Seleziona tutto
char *test(char *str1) {
char str[50];
strcat (str,str1);
strcat (str,".txt");
return str;
}
Se provassi a farlo il compilatore stamperebbe un messaggio del tipo:
Questo perché la variabile
str verrebbe allocata sullo stack, e questo vuol dire che verrebbe sovrascritta da valori imprevedibili al termine della funzione. Potresti usare
str[50] solo dichiarando tale variabile come globale oppure mantenendola come variabile locale ma aggiungendo la keyword
static (tale istruzione fa che la variabile venga allocata non sullo stack ma nella sezione
.code del programma, e ciò fa che venga preservato il valore della variabile anche al termine della funzione).
Nota a bordo pagina: utilizzando una stringa di dimensioni fisse è bene usare
strncat per evitare buffer overflow.