0

我有这个简单的代码(项目的一部分):

void displayFileProperties(struct stat* file,char*  outputProperties , char * path)
{

    struct tm* time;

        // code 
        // code
        time = localtime(&file->st_mtim);


        // code 

}

日食不断向我发出警告的地方:

passing argument 1 of ‘localtime’ from incompatible pointer type [enabled by default]   main.c  /ex4    line 340    C/C++ Problem

知道如何解决这个问题吗?谢谢

4

5 回答 5

1

st_mtim是一个结构时间规范(秒和纳秒)。你想要st_mtime

于 2012-07-26T19:52:01.530 回答
1

完全改变答案:

建议:

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 结构支持三个文件时间戳字段的纳秒分辨率。如果定义了 _BSD_SOURCE 或 _SVID_SOURCE 功能测试宏,Glibc 使用 st_atim.tv_nsec 形式的名称公开每个字段的纳秒分量。这些字段在 POSIX.1-2008 中指定,从 2.12 版开始,如果 _POSIX_C_SOURCE 定义为 200809L 或更大,或者 _XOPEN_SOURCE 定义为 700 或更大,glibc 也会公开这些字段名称。如果上述宏均未定义,则纳秒值将以 st_atimensec 形式的名称公开。在不支持亚秒时间戳的文件系统上,纳秒字段返回值为 0。

2) 显然,makefile(即“工作”)有一个Eclipse 没有的#define,反之亦然。

可能是 _POSIX_C_SOURCE 和/或 _XOPEN_SOURCE 之一。

运行此命令以查看命令行(makefile?)环境中存在的内容:

gcc -dM -E - < /dev/null | less

3)请发回你找到的东西!

于 2012-07-26T19:52:27.817 回答
1

你会想用这个来代替:

time = localtime(&file->st_mtime);

请注意末尾添加的“e”。st_mtim 是一个 timespec,添加了 'e' 它是一个 time_t (你需要什么)。

于 2012-07-26T20:21:58.730 回答
0

我对 Eclipse 有同样的问题:字段 st_mtime 无法解析(语义错误)

通过右键单击项目,选择索引->“刷新所有文件”修复了 Eclipse 中的问题

于 2013-10-14T22:45:09.057 回答
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;
}
于 2019-02-22T03:42:24.983 回答