为什么我要执行以下操作:
struct timeval time;
gettimeofday(&time, NULL);
log("time seconds %i useconds %i", sizeof(time.tv_seconds), sizeof(time.tv_usec));
它是否在openwrt中返回:
time seconds 4 useconds 4259840
time.tv_usec
使用4259840字节吗? tv_seconds
(因为epoch)有意义,因为它是一个很长的int。但tv_usec
应始终低于100万。
答案 0 :(得分:3)
sizeof
运算符会返回size_t
个对象。您应该使用%zu
格式将其打印出来,而不是%i
。由于格式字符串和参数类型不匹配,你很可能会遇到一些参数传递不幸事件。如果你在编译器上提高警告级别,你应该收到警告。例如,clang告诉我:
example.c:7:25: error: conversion specifies type 'int' but the argument has type
'unsigned long' [-Werror,-Wformat]
printf("time seconds %i useconds %i\n", sizeof(time.tv_sec), ...
~^ ~~~~~~~~~~~~~~~~~~~
%lu
当然,这可能取决于您的log()
功能的实施方式 - 这也可能是您的错误来源。
答案 1 :(得分:1)
凝视我的水晶球...问题是你的日志功能错误地解析了它的参数。请尝试使用printf。