Valore immondizia nel file dopo la scrittura

Sto facendo una funzione di registro che memorizza in un file.

int log_func(char* msg) { int log_fd=0; ssize_t write_ret=0; int close_logfile_ret=0; time_t result; char error_msg[MAX_LOG_MSG_LEN]={' '}; log_fd = open("/home/pi/log_client.txt", O_CREAT|O_APPEND|O_WRONLY); if(log_fd==-1) { printf("log failed !!----file open"); exit(1); } result = time(NULL); snprintf(error_msg,MAX_LOG_MSG_LEN,"DALI_Server:%s:%s",asctime(localtime(&result)),msg); write_ret = write(log_fd,error_msg,sizeof(error_msg)); if(write_ret == -1) { printf("log failed !!---- write"); exit(1); } close_logfile_ret = close(log_fd); if(close_logfile_ret == -1) { printf("log failed !!---- close"); exit(1); } return 0; } 

Qui l’array error_msg è stato inizializzato su ‘spazio’. ma quando scrivo meno caratteri ad esso ottengo i seguenti risultati.

input: log_func("DALI Server Started");log_func("File open/create..."); uscita nel file:

 DALI_Server:Thu Jan 16 16:53:56 2014 :DALI Server started ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@DALI_Server:Thu Jan 16 16:54:06 2014 File open/create...^@^@^@^@^@^@^@^@^@.. 

Perché arrivano i personaggi spazzatura.

Si scrive l’ intero array error_msg , anche il contenuto dopo il terminatore di stringa. Invece dovresti usare strlen per ottenere la lunghezza della stringa nell’array e scrivere solo questo:

 write_ret = write(log_fd, error_msg, strlen(error_msg));