Ciao a tutti, ho questo problema.

Ho una variabile globale messaggio, una stringa da stampare a schermo. La variabile è dichiarata nel main e usata in più file, mediante l'uso di extern.

L'idea è di cancellare la stringa prima di scriverne una nuova, ossia quando cambia il messaggio da stampare a video.

Il problema è che la stringa non si cancella, rimane lì, e se quella nuova è più corta la sovrascrive parzialmente.

Ad esempio:

- stampa messaggio="MESSAGGIO 1"
- cancella messaggio
- copia "MEX 2" in messaggio
- stampa messaggio
- mi viene stampato "MEX 2GGIO 1"

Questo avviene sia usando un array di dimensione fissa sia usando la memoria dinamica.

codice:
char messaggio[100];
if(strlen(messaggio)>0){ 
	puts("resetting messaggio"); 
	for(tmp=0;tmp<strlen(messaggio);tmp++) messaggio[tmp]='\0'; 			
}
codice:
char* messaggio=NULL;
if (messaggio!=NULL) free(messaggio);
messaggio=malloc((1+strlen(d_words[34]))*sizeof(char));
[...]
puts(messaggio);
free(messaggio);
messaggio=NULL;
Da notare che, nel primo caso, se al posto di '\0' uso ad esempio '-' la nuova stringa sarà "MEX 2------", quindi prende il comando ma è come se interpretasse '\0' come 'lascia invariato'.

Idee?