我有这个简单的代码(项目的一部分):
void displayFileProperties(struct stat* file,char* outputProperties , char * path)
{
struct tm* time;
// code
// code
time = localtime(&file->st_mtim);
// code
}
eclipse不断向我发出警告:
passing argument 1 of ‘localtime’ from incompatible pointer type [enabled by default] main.c /ex4 line 340 C/C++ Problem
知道怎么解决这个问题吗?谢谢
答案 0 :(得分:1)
st_mtim
是一个struct timespec(秒和纳秒)。你想要st_mtime
。
答案 1 :(得分:1)
完全改变答案:
SUGGESTIONS:
1)确保#include这些标题:
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
2)将指针投射到“const”
time = localtime((const time_t *)&file->st_mtime);
3)回发发生的事情
=============================================== ==
其他建议:
1)请阅读以下两个链接:
从内核2.5.48开始,stat结构支持纳秒分辨率 对于三个文件时间戳字段。 Glibc暴露纳秒 每个字段的组件使用st_atim.tv_nsec形式的名称,如果是 _BSD_SOURCE或_SVID_SOURCE功能测试宏已定义。这些字段在POSIX.1-2008中指定,从版本2.12开始, 如果定义了_POSIX_C_SOURCE,glibc也会公开这些字段名称 值为200809L或更大,或_XOPEN_SOURCE定义为 值700或更大。如果没有上述宏 定义,然后用表格的名称公开纳秒值 st_atimensec。在不支持亚秒的文件系统上 时间戳,纳秒字段返回值为0.
2)显然,makefile(“工作”)有一个Eclipse不能的#define,反之亦然。
可能是_POSIX_C_SOURCE和/或_XOPEN_SOURCE。
运行此命令以查看命令行(makefile?)环境中存在的内容:
gcc -dM -E - < /dev/null | less
3)请回复你找到的内容!
答案 2 :(得分:1)
你会想要使用它:
time = localtime(&file->st_mtime);
注意最后添加的'e'。 st_mtim是一个timespec,添加'e'是time_t(你需要的)。
答案 3 :(得分:0)
我在Eclipse中遇到了同样的问题: 字段st_mtime无法解析(语义错误)
通过右键单击项目修复Eclipse中的问题,选择Index-&gt;“Freshen All Files”
答案 4 :(得分:0)
#include <malloc.h>
#include <time.h>
#include <stdio.h>
static struct tm* alarmTime(void);
int main(){
printf("Hour :%i\n", alarmTime()->tm_hour);
printf("Minute :%i\n", alarmTime()->tm_min);
return 0;
}
static struct tm* alarmTime(void){
time_t now = time(NULL);
struct tm* ptm;
#ifdef HAVE_LOCALTIME_R
struct tm tmbuf;
ptm = localtime_r(&now, &tmbuf);
#else
ptm = localtime(&now);
#endif
return ptm;
}