C中的strftime警告错误

时间:2014-05-12 21:53:22

标签: c file file-io time

我在.c文件中有一个方法,它返回文件的修改时间。

int lastModifiedTime(char *filePath)
{
    struct stat attrib;
    stat(filePath, &attrib);
    char datestring[256];
    struct tm *tm = localtime(&attrib.st_mtime);
    strftime(datestring, sizeof(datestring), "%s", tm);
    return atoi(datestring);
}

但是我得到了这个编译警告,我该如何解决呢?

client/file_monitor.c:227:5: warning: ISO C does not support the '%s' gnu_strftime format [-Wformat=]
 strftime(datestring, sizeof(datestring), "%s", tm);
 ^

2 个答案:

答案 0 :(得分:1)

根据这个(以及你的错误): http://www.cplusplus.com/reference/ctime/strftime/

%s不是受支持的格式选项。我不确定你使用%s的是什么,但也许%S正是你要找的。

答案 1 :(得分:0)

这必须是更复杂和低效的写作方式之一:

int lastModifiedTime(const char *filePath)
{
    struct stat attrib;
    if (stat(filePath, &attrib) != 0)
        return -1;
    return attrib.st_mtime;
}

然而,要回答这个问题:

  • 指定-pedantic时会出现错误(即使显示所有其他严格警告,也不会出现错误):

    $ gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -Werror -pedantic -c stt.c
    stt.c: In function ‘lastModifiedTime’:
    stt.c:14:5: error: ISO C does not support the ‘%s’ gnu_strftime format [-Werror=format=]
         strftime(datestring, sizeof(datestring), "%s", tm);
         ^
    cc1: all warnings being treated as errors
    $
    
  • 如上所述,通过省略-pedantic,您可以避免该错误。假设需要-pedantic,那么你似乎被软管了。我能得到的最近的是避免错误,但仍然收到警告:

    $ gcc -O3 -g -std=c11 -Wall -Wextra -Werror -pedantic -Wno-error=format= -c stt.c
    stt.c: In function ‘lastModifiedTime’:
    stt.c:14:5: warning: ISO C does not support the ‘%s’ gnu_strftime format [-Wformat=]
         strftime(datestring, sizeof(datestring), "%s", tm);
         ^
    $
    
  • 我可能缺乏想象力,但我无法抑制警告。我尝试过(在Ubuntu 14.04上使用GCC 4.8.2):

    • -Wnoformat
    • -Wno-format
    • -Wno-format=
    • -Wnoerror=format=
    • -Wnoformat=

    但这些都没有被接受。