gpt4 book ai didi

c++ - 与 snprintf 和 size_t len 混淆

转载 作者:行者123 更新时间:2023-11-28 07:43:15 25 4
gpt4 key购买 nike

抱歉我的第 10 亿个问题,但我无法弄清楚我的实现需要什么。

我有一个名为 fmttimetest.cc(包含 main)的测试文件,它是包含 fmttime.h 和 fmttime.cc(实现文件)的模块的一部分

在fmttime.cc我有这个功能

 28 ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime)
29 {
30 tzset(); // Corrects timezone
31
32 int epochT = (tv->tv_sec) - timezone; // Epoch seconds with
33 int epochUT = tv->tv_usec; // Timezone correction
34
35 int seconds = epochT % 60;
36 epochT /= 60;
37 etime->et_sec = seconds;
38 etime->et_usec = epochUT;
39
40 int minutes = epochT % 60;
41 epochT /= 60;
42 etime->et_min = minutes;
43
44 int hours = (epochT % 24) + daylight; // Hours with DST correction
45 epochT /= 24;
46 etime->et_hour = hours;
47
48
49 printf("%d,%d,%d\n", seconds, minutes, hours);
50 printf("%d\n", epochUT);
51 printf("%d\n", timezone);
52 printf("%d\n", daylight);
53 return etime;
54
55 }
56
57 char* formatTime(struct timeval* tv, char* buf, size_t len)
58 {
59
60 struct ExpandedTime etime2;
61 localTime(tv, &etime2);
62 snprintf();
63 }

*请注意,包含结构扩展时间的最上面几行代码已被截断,但我向您保证它们已正确实现

现在在我的主测试文件 fmttimetest.cc 中调用 formatTime 函数。但是我对 buffer 和 size_t len 应该如何交互感到困惑。我在某种程度上知道 size_t len 是什么......可以这么说,它给你一个对象的大小。所以在我的主要 test.cc 中我有这个

  6 #include <curses.h>
7 #include <sys/time.h>
8 #include <time.h>
9 #include "fmttime.h"
10
11 struct timeval tv;
12
13 int main()
14 {
15 char buf[] = {"%d"};
16 size_t len;
17 gettimeofday(&tv, NULL);
18 formatTime(&tv, buf, len);
19 }

所以这就是我困惑的地方。我需要传递此缓冲区,以便我的实现程序可以将纪元时间以人类可读的格式写入此缓冲区,例如日、小时、分钟、秒。我不知道我将如何去做这件事。我无法更改它们按原样提供的任何函数原型(prototype),并希望按原样使用......

我也不确定如何在使用它的上下文中使用 snprintf() 将时间打印到传递的缓冲区中....

再次感谢阅读本文的人。

最佳答案

调用 formatTime 的正确方法是这样的:

int main()
{
char buf[64];
size_t len = sizeof(buf);
gettimeofday(&tv, NULL);
formatTime(&tv, buf, len);
}

因此您传入缓冲区及其长度。然后缓冲区内容由 formatTime 写入。

编辑:缓冲区当然需要有足够的长度:)

要将 snprintf 与您的时间结构一起使用,您可以这样做(未经测试):

snprintf(buf, len, "%02i:%02i:%02i", etime2.et_hour, etime2.et_min, etime2.et_sec);

关于c++ - 与 snprintf 和 size_t len 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com