localtime在linux中使用struct tm *&stat *发出警告的任何特定原因?

问题描述 投票:0回答:5

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

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

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

c linux time stat localtime
5个回答
1
投票

st_mtim是一个struct timespec(秒和纳秒)。你想要st_mtime


1
投票

你会想要使用它:

time = localtime(&file->st_mtime);

注意最后添加的'e'。 st_mtim是一个timespec,添加'e'是time_t(你需要的)。


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或更高,则glibc也会公开这些字段名称,或者_XOPEN_SOURCE定义为值700或更大。如果没有定义上述宏,则使用st_atimensec形式的名称公开纳秒值。在不支持亚秒时间戳的文件系统上,返回值为0的纳秒字段。

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

可能是_POSIX_C_SOURCE和/或_XOPEN_SOURCE。

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

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

3)请回复你找到的内容!


0
投票

我在Eclipse中遇到了同样的问题:无法解析字段st_mtime(语义错误)

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


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.