C - strftime中的指针/整数组合不正确()

时间:2009-06-02 04:36:09

标签: c strftime

我收到编译错误:(83)错误:指针/整数组合不正确:arg#1。

以下是执行此操作的代码:

char boot_time[BUFSIZ];

... 第83行:

strftime(boot_time, sizeof(boot_time), "%b %e %H:%M", localtime(table[0].time)); 

其中table是结构,time是time_t成员。

我读到“不正确的指针/整数组合”意味着该函数未定义(因为在C中,函数在找不到它们时返回int),而正常的解决方案是包含一些库。 strftime()和localtime()都在time.h中,而string.h中的sizeof(),我已经包含了这两个(以及stdio.h)我完全被这里难倒了。

4 个答案:

答案 0 :(得分:4)

struct tm * localtime ( const time_t * timer );

正确的usage是:

time_t rawtime;
localtime(&rawtime);

在您的情况下:localtime(&(table[0].time))

答案 1 :(得分:1)

localtime需要time_t*,因此传递&table[0].time(地址,而不是值)。

答案 2 :(得分:1)

问题似乎是对本地时间的调用。此函数需要time_t指针而不是值。我相信您需要按以下方式拨打电话

localtime(&(table[0].time))

当地时间签名

struct tm * localtime ( const time_t * timer );

对localtime API的引用

答案 3 :(得分:0)

正如其他人所提到的,特别的问题是您需要将time_t *传递给本地时间。

但是,一般的问题是你在复杂的一行上做了一个不明确的问题。当你遇到错误时,第一件事就是将线分成它的组成部分,以缩小问题的确切位置,如下所示:

char boot_time[BUFSIZ];
// Temporary, putting the sizeof() call inline is normally better.
size_t boot_time_size = sizeof(boot_time); 
time_t temp_time = table[0].time;
// Use a more descriptive name here.
struct tm *mytime = localtime(temp_time); 

strftime(boot_time, boot_time_size, "%b %e %H:%M", mytime);

这样编译器可以告诉你哪个调用实际上给你带来了问题。一旦你弄明白了,你可以按照你认为合适的方式将它压缩 - 我可能仍然会将localtime()调用保持在自己的行上,但那只是我。