7

「HH:MM:SS」形式で現在の時刻を文字配列(文字列)に変換して、後で結果を簡単に出力できるようにする必要があります。printf("%s", timeString);

私はtimevaltime_tタイプについてかなり混乱しているので、どんな説明も素晴らしいでしょう:)

編集:それで私はstrftimeなどで試しました、そしてそれはちょっとうまくいきました。これが私のコードです:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

しかし、出力は次のとおりです。「13:49:53a ?? J`aS?」

最後の「a??J`aS?」はどうなっているの?

4

3 に答える 3

13

あなたはこのコードからゴミを得ています:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

文字列にヌルターミネータ(\ 0)のスペースを許可していないため、文字列が出力されたときに、末尾がどこにあるかがわからず、文字列の一部としてメモリの次のビットにあるランダムなゴミを解釈します。

これに変更します:

time_t current_time;
struct tm * time_info;
char timeString[9];  // space for "HH:MM:SS\0"

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);
puts(timeString);

strftime()また、\ 0を追加するのに十分なスペースがあるため、正しく機能します。両方の場所で数値を変更するのを忘れるリスクを回避するために、sizeof(array)を使用していることに注意してください。

于 2009-10-07T11:56:42.033 に答える
5

strftime関数を見てください。この関数を使用すると、選択した形式で時間をchar配列に書き込むことができます。

于 2009-10-07T11:41:01.120 に答える
3
#include <stdio.h>
#include <time.h>

/* get seconds since the Epoch */
time_t secs = time(0);

/* convert to localtime */
struct tm *local = localtime(&secs);

/* and set the string */
sprintf(timeString, "%02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);

時間を処理するための重要なタイプ(プロセス/スレッド時間ではなく、壁掛け時計タイプの時間)はとtime_tですstruct tm
いくつかの作業では、一方と他方の間で変換できますが、UTC時間ではなく現地時間に注意を払う必要があります。

の説明を<time.h>よく読んで、Cで時間を稼ぐまでそこで関数を試してください。

繰り返しになりますが、UTC時間と現地時間に注意してください。

于 2009-10-07T11:49:37.570 に答える