2

ここに私のプログラム time_play.c があります:

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

int
main (void)
{
    char *time_str = "2011-07-20 17:30:18";
    time_t time_tm = getdate(time_str);

    printf("str: %s and time: %s \n", time_str, ctime(&time_tm));

    return 0;
} 

そしてそれは出力です:

$ gcc -o time_play time_play.c 
$ ./time_play
str: 2011-07-20 17:30:18 and time: Wed Dec 31 16:00:00 1969

time の値が NULL になっていることがわかります。なぜそうなのですか?

4

3 に答える 3

2

使用している日付形式を指定するテンプレート ファイルを作成しましたか?

マニュアルページから:

ユーザー提供のテンプレートは、入力文字列の解析と解釈に使用されます。テンプレートは、ユーザーが作成し、環境変数 DATEMSK によって識別されるテキスト ファイルです。

timetemplate.txt のようなファイルを作成します。

%Y-%m-%d %H:%M:%S

次に、それを指すように DATEMSK の値を設定します。

export DATEMSK=/home/somebody/timetemplate.txt

このコードは、DATEMSK の設定と組み合わせて、OS X で機能しました。

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

int main (void)
{
  char *time_str = "2011-07-20 17:30:18";
  struct tm *time_tm = getdate(time_str);
  time_t t = mktime(time_tm);

  printf("str: %s and time: %s", time_str, ctime(&t));
  return 0;
}
于 2011-07-21T18:09:11.547 に答える
1

細かいマニュアルから:

struct tm *getdate(const char *string);

関数はではなく をgetdate返します。あなたのプログラムが失敗したり発火したりしていないことは幸運です。struct tm *time_t

コンパイラの警告フラグをさらに有効にしてください。次のように表示されるはずです。

警告: 初期化により、キャストなしでポインターから整数が作成されます

9号線について。

于 2011-07-21T18:56:23.353 に答える