char timestamp()
{
time_t ltime;
struct tm * loctime;
char thetime;
time(<ime);
loctime=localtime(<ime);
printf("%s", asctime(loctime));
// "Sat Mar 2 12:12:57 2013"
thetime=*asctime(loctime);
// why "83"?!
return thetime;
}
void WriteLog(char* Msg, ...)
{
FILE logfile;
logfile=*fopen(LOG_FILE, "r+");
fseek(&logfile, 0, SEEK_END);
fprintf(&logfile, "%hhd, %s", timestamp(), Msg);
fclose(&logfile);
}
我觉得这里有一个非常基本的错误。当我打印时间时,它非常好,但当我尝试将其分配给变量以在另一个函数中使用时,我得到83
而不是实际的日期和时间,当我从asctime(loctime)
中删除星号时,我得到-128
并且编译器发出警告:Incompatible pointer to integer conversion assigning to 'char' from 'char *'; dereference with *
。
答案 0 :(得分:0)
char
只是一个ASCII字符,而char*
是指向通常用于保存字符数组(即字符串)的内存位置的指针。
值为83
,对应于来自时间戳字符串S
的第一个字符的ASCII字符Sat Mar 2 12:12:57 2013
而是尝试直接返回char*
的代码,该代码可用于写入日志文件。
char* timestamp()
{
time_t ltime;
struct tm * loctime;
char thetime;
time(<ime);
loctime=localtime(<ime);
printf("%s", asctime(loctime));
// "Sat Mar 2 12:12:57 2013"
return asctime(loctime);
}
void WriteLog(char* Msg, ...)
{
FILE logfile;
logfile=*fopen(LOG_FILE, "r+");
fseek(&logfile, 0, SEEK_END);
fprintf(&logfile, "%hhd, %s", timestamp(), Msg);
fclose(&logfile);
}
答案 1 :(得分:0)
char
只是一个字符,而不是字符串。要声明指向字符串的变量,必须使用char *
。
所以它应该是:
char *thetime;
然后分配应该是:
thetime = asctime(loctime);
timestamp
的声明应该是:
char *timestamp()
当您在WriteLog
中打印时间时,应该是:
fprintf(&logfile, "%s, %s", timestamp(), Msg);
答案 2 :(得分:0)
您已将时间戳功能和时间变量都声明为char
。这是一个1字节的变量,只能保存-128到+127范围内的整数。你想要的是一个指针(char *
),以便他们可以保持并返回指向asctime返回的字符串的指针。
将两个声明从char
更改为char *
,然后删除那些因asctime而返回的*
。那应该解决它。