4

我想把 GNU/Linuxdate命令的输出放在一个字符数组中。

例子:

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);

但是,您可以使用localtimeandstrftime而不是执行外部程序。

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*命令输出的 a,而是命令的退出代码。命令成功完成,并返回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 回答