写入后文件中的垃圾值
Garbage Value in File after write
我正在制作一个存储在文件中的日志功能。
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'。但是当我写更少的字符时
我得到以下结果。
输入: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...^@^@^@^@^@^@^@^@^@..
为什么会出现乱码
你写整个 error_msg
数组,甚至是字符串终止符之后的内容。相反,您应该使用 strlen
来获取数组中 string 的长度,并且只写:
write_ret = write(log_fd, error_msg, strlen(error_msg));
我正在制作一个存储在文件中的日志功能。
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'。但是当我写更少的字符时 我得到以下结果。
输入: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...^@^@^@^@^@^@^@^@^@..
为什么会出现乱码
你写整个 error_msg
数组,甚至是字符串终止符之后的内容。相反,您应该使用 strlen
来获取数组中 string 的长度,并且只写:
write_ret = write(log_fd, error_msg, strlen(error_msg));