写入后文件中的垃圾值

我正在做一个存储在一个文件中的日志function。

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; } 

这里的数组error_msg已经被初始化为'space'。 但是当我写less量的字符,我得到以下结果。

input: log_func("DALI Server Started");log_func("File open/create..."); 输出在文件中:

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

为什么垃圾angular色来了

你写了整个 error_msg数组,甚至是字符串终止符之后的内容。 相反,你应该使用strlen来获取数组中的字符串的长度,只写:

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