0

10億回目の質問で申し訳ありませんが、実装に何が必要かわかりません。

fmttime.h と fmttime.cc (実装ファイル) を含むモジュールの一部である fmttimetest.cc (main を含む) という名前のテスト ファイルがあります。

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 関数を呼び出します。ただし、バッファと 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 }

ここが混乱しているところです。このバッファを渡す必要があるため、実装プログラムはエポック時間をこのバッファに人間が読める形式 (日、時、分、秒など) で書き込むことができます。私はこれをどのように行うかについて迷っています。与えられた関数プロトタイプをそのまま変更することはできず、そのまま使用することが期待されています......

また、渡されたバッファに時間を出力するために使用するコンテキストで snprintf() を使用する方法もわかりません....

これを読んでくれた人たちにもう一度感謝します。

4

2 に答える 2

1

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);
于 2013-03-14T06:10:49.453 に答える
0

buffer は文字配列です。あなたの場合、それは文字列を表します。c の文字列は、'\0' で終わる文字配列として定義されます。バッファのサイズは、文字列の長さに「\0」記号を加えたものです。

さらに調べてみましょう。

char buf[] = {"%d"};
size_t len;
len = strlen(buf); // strlen returns the length without the zero terminating char.
len = sizeof(buf); // Because buf is preallocated in compilation, you can get it's length, this includes the zero at the end.
于 2013-03-14T06:01:31.163 に答える