我想将GNU / Linux date
命令的输出放在字符数组中。
示例:
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
。
答案 0 :(得分:7)
使用popen
能够读取命令的输出。请务必使用pclose
关闭广告系列。
FILE *f = popen("date", "r");
fgets(array, sizeof(array), f);
pclose(f);
但是,您可以使用localtime
和strftime
代替执行外部程序。
time_t t = time(0);
struct tm lt;
localtime_r(&t, <);
strftime(array, sizeof(array), "%a %b %d &T %z %Y", <);
ctime
类似,但不包括时区。
ctime_r(&t, array);
答案 1 :(得分:2)
当你调用system(command)
时,它的返回值不是命令输出的char*
,而是命令的退出代码。该命令成功完成,并返回0
;这就是你看到NULL
的原因。如果要获取"date"
命令返回的字符串,则需要捕获输出流并将其转换为字符串。
答案 2 :(得分: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);
}