システム時刻を取得するために、次のコード セグメントを使用しました。しかし、それはセグメンテーション違反になります。助けてください。
printf("Time : %s\n", System("time"));
return 0;
代わりに次のコードを使用してください。
time_t t;
time(&t);
printf("%s", ctime(&t));
これで問題は解決します。
system() 関数は、文字列ではなく、終了ステータス (int) を返します。を呼び出すsystem("time")
と、時刻が stdout に出力されます。それが必要な場合は、使用してください
system("time");
%s
int 0は、printf のポインターとして解釈されると NULL ポインターになるため、segfault が発生します。NULL ポインターの逆参照は未定義の動作であり、セグメンテーション違反はそのような未定義の動作の 1 つの可能性です。
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.
system() 関数は整数を返しますが%s
、文字列を出力することを示します。システム関数はtime
プログラムの結果を返すのではなく、終了値を返します。