0

システム時刻を取得するために、次のコード セグメントを使用しました。しかし、それはセグメンテーション違反になります。助けてください。

printf("Time : %s\n", System("time"));
return 0;
4

4 に答える 4

3

代わりに次のコードを使用してください。

time_t t;
time(&t);
printf("%s", ctime(&t));

これで問題は解決します。

于 2012-05-15T13:45:18.880 に答える
2

system() 関数は、文字列ではなく、終了ステータス (int) を返します。を呼び出すsystem("time")と、時刻が stdout に出力されます。それが必要な場合は、使用してください

 system("time");

%sint 0は、printf のポインターとして解釈されると NULL ポインターになるため、segfault が発生します。NULL ポインターの逆参照は未定義の動作であり、セグメンテーション違反はそのような未定義の動作の 1 つの可能性です。

于 2012-05-15T13:46:11.820 に答える
2

system()ではなく、という意味だと思いますSystem()

system()コマンドが端末に出力したものを含む文字列が返されることを期待しているようです。それはしません。実際、system()子プロセスの終了コードを返します。

現在の時刻を取得する最も簡単な方法は、次のtime()関数を使用することです。

NAME
       time - get time in seconds

SYNOPSIS
       #include <time.h>

       time_t time(time_t *t);

DESCRIPTION
       time()  returns  the  time  since  the  Epoch (00:00:00 UTC, January 1,
       1970), measured in seconds.

       If t is non-NULL, the return value is also stored in the memory pointed
       to by t.
于 2012-05-15T13:45:10.620 に答える
1

system() 関数は整数を返しますが%s、文字列を出力することを示します。システム関数はtimeプログラムの結果を返すのではなく、終了値を返します。

于 2012-05-15T13:45:13.797 に答える