3

我收到编译器错误:(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 中,函数在找不到时返回整数),正常的解决方案是包含一些库。strftime() 和 localtime() 都在 time.h 中,而 sizeof() 在 string.h 中,我已经包含了这两个(连同 stdio.h)我在这里完全被难住了。

4

4 回答 4

4
struct tm * localtime ( const time_t * timer );

正确的用法是:

time_t rawtime;
localtime(&rawtime);

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

于 2009-06-02T04:44:01.903 回答
1

localtime接受 a time_t*,所以通过&table[0].time(地址,而不是值)。

于 2009-06-02T04:41:37.660 回答
1

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

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

当地时间签名

struct tm * localtime ( const time_t * timer );

参考本地时间 API

于 2009-06-02T04:43:01.933 回答
0

正如其他人所提到的,特定的问题是您需要将 a 传递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() 调用保持在自己的线路上,但这只是我。

于 2009-06-02T05:46:05.300 回答