コマンドラインからエポック形式で時刻を入力しようとしていますが、それを struct timespec 変数に保存したいと考えています。
私はそれを保存して何とか印刷することができますが、timespec変数に何かを追加すると奇妙なことが起こります
これがコードです
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]){
struct timespec InputTime;
InputTime.tv_sec = (time_t)argv[1]; //(__time_t)
InputTime.tv_nsec = (long)argv[2]; //(__syscall_slong_t)
printf("The time before %s,%s\n",
InputTime.tv_sec,
InputTime.tv_nsec);
InputTime.tv_sec += 3;
InputTime.tv_nsec += 3;
printf("The time after %s,%s\n",
InputTime.tv_sec,
InputTime.tv_nsec);
return 0;
}
これが入力と出力です
INPUT
./InputTime 1615578864 438734073
OUTPUT
The time before 140733952311809,140733952311820
The time after 140733952311812,140733952311823
*argv[] に他の変数タイプを使用しようとし、print の出力に %s を使用しようとしましたが、前の時間では正しい入力が得られましたが、後の時間では何か奇妙なことがわかりました。 %ld を %s に変更します。さらに、これを行うと、正しい形式を使用していないため、コンパイラはいくつかの警告を出します
./InputTime 1615578864 438734073
The time before 1615578864,438734073
The time after 5578864,734073
このgccバージョンを使用しています
gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.