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'; }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'.codice:char* messaggio=NULL; if (messaggio!=NULL) free(messaggio); messaggio=malloc((1+strlen(d_words[34]))*sizeof(char)); [...] puts(messaggio); free(messaggio); messaggio=NULL;
Idee?![]()