4

dateGNU/Linuxコマンドの出力を文字配列に入れたい。

例:

char array[25];

$ date
Thu Jul 19 09:21:31 IST 2012

printf("%s", array);
/* Should display "Thu Jul 19 09:21:31 IST 2012" */

私はこれを試しました:

#include <stdio.h>
#include <string.h>

#define SIZE 50

int main()
{
    char array[SIZE];

    sprintf(array, "%s", system("date"));
    printf("\nGot this: %s\n", array);

    return 0;
}

しかし、出力はNULL配列に表示されます。

4

3 に答える 3

6

popenコマンドの出力を読み取ることができるようにするために使用します。でストリームを閉じてくださいpclose

FILE *f = popen("date", "r");
fgets(array, sizeof(array), f);
pclose(f);

ただし、外部プログラムを実行する代わりにlocaltimeandを使用できます。strftime

time_t t = time(0);
struct tm lt;
localtime_r(&t, &lt);
strftime(array, sizeof(array), "%a %b %d &T %z %Y", &lt);

ctime似ていますが、タイムゾーンが含まれていません。

ctime_r(&t, array);
于 2012-07-19T03:59:42.660 に答える
2

を呼び出すsystem(command)と、戻り値はchar*コマンドの出力ではなく、コマンドの終了コードになります。コマンドは正常に完了し、0;を返します。そのため、 が表示されますNULL。コマンドによって返された文字列をフェッチする場合は"date"、出力ストリームをキャプチャして文字列に変換する必要があります。

于 2012-07-19T04:00:01.797 に答える
1
#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t result;
    char array[25] = {'\0'};
    result = time(NULL);
    sprintf(array, "%s", asctime(localtime(&result)));
    printf("%s", array);
    return(0);
}
于 2012-07-19T06:01:37.717 に答える