【问题标题】:strptime() produces wrong result on armv7l environmentstrptime() 在 armv7l 环境中产生错误的结果
【发布时间】:2016-02-27 22:33:20
【问题描述】:

我有以下代码:

#include <stdio.h>
#include <string.h>
#include <time.h>

time_t make_time(char *input, char *hs) {
    struct tm t;

    char d[17];
    strcpy(d, input);
    strcat(d, hs);
    d[16] = '\0';

    strptime(d, "%m%d%Y%H:%M:%S", &t);

    printf("data: %s", asctime(&t));

    return mktime(&t);
}

void main(int argc, char *argv[]) {
    char *s = argv[1];
    char *e = argv[2];

    time_t now = time(NULL);
    time_t start = make_time(s, "00:00:00");
    time_t end = make_time(e, "23:59:59");

    int s1 = difftime(now, start);
    int s2 = difftime(end, now);

    int ret = 0;
    if (s1 > 0 && s2 > 0) {
        ret = 1;
    }

    printf("Result:\nInput: %s %s\nDiff: start: %d; end: %d\nret: %d\n", s, e, s1, s2, ret);

    printf("\n");
}

已构建 2 个版本。一个用于 debian linux,另一个用于 arm 设备。

在 debian linux 上,结果看起来是正确的:

devbox@debian:~$ ./a.out 11182015 11302015
data: Wed Nov 18 00:00:00 2015
data: Mon Nov 30 23:59:59 2015
Result:
Input: 11182015 11302015
diff: start: 665291; end: 457908
ret: 1

但在 armv7l 环境中,strptime() 会产生错误的结果:

# /tmp/a.out 11182015 11302015
data: ??? Jan  8 ??:??:?? 1900
data: ??? Jan  8 ??:??:?? 1900
Result:
Input: 11182015 11302015
diff: start: 1448437831; end: -1448437831
ret: 0

armv7l 上的 strptime 有问题还是不是标准的 GNU C 方法?

更新

这是uname 命令的结果:

# uname -a
Linux buildroot 3.1.0-xg3517-1.1 #1 Tue Mar 12 12:54:57 JST 2013 armv7l GNU/Linux

【问题讨论】:

  • 我猜是 Cortex A9 架构。
  • @LPs:那就是 ARMv7M/R/A。仍然缺少操作系统。
  • 看起来你传递了无效数据。
  • 注意:time_t make_time(char *input, char *hs) { ...printf("Invalid parameter!\n"); return; 是一个问题,因为返回了 nothing。建议return -1;.
  • d[16] = '\0'; 是多余的。如果您已经溢出缓冲区,那就太晚了。为避免缓冲区溢出影响这一点,请使用snprintf(d, sizeof d, "%s%s", input, hs);

标签: c gcc arm


【解决方案1】:

我终于知道为什么并让它起作用了。问题是:strptime() 似乎不知道如何解析以下格式:

"%m%d%Y%H:%M:%S"
// or
"%m%d%Y %H:%M:%S"
// or
"%m/%d/%Y %H:%M:%S"

但是,如果我使用这个:"%m-%d-%Y %T"

strptime(d, "%m-%d-%Y %T", &t);

然后就成功了,真可惜!

我不知道为什么这些格式不被接受,因为文档没有说明那些没有完全实现的内容。无论如何,如果有人知道为什么,请给我一些启发。

【讨论】:

  • 每个字段描述符可能消耗的数字太多。
猜你喜欢
  • 2012-11-23
  • 2013-09-13
  • 1970-01-01
  • 2021-07-04
  • 2018-08-21
  • 2021-03-30
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多