我的程序读取标准输入并将其存储到char数组cmd
中,然后调用system(cmd)
。我打印出cmd
,其内容符合我的预期。但system(cmd)
未将内容保存在report.log
中。我尝试使用存储在cmd2
中的文字字符串,这次它起作用了。那么system(cmd)
有什么问题?
我正在使用Windows 8.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdarg.h>
#include <time.h>
#define MAXLEN 100
char *now(){
time_t t;
time(&t);
return asctime(localtime(&t));
}
int main(int argc, char *argv[])
{
char comment[80];
char cmd[120];
fgets(comment, 80, stdin);
sprintf(cmd, "echo '%s %s' >> report.log", comment, now());
printf("%s", cmd); // content of cmd is what I expect
system(cmd); // does not work, why?
char cmd2 = "echo 'Hello world' >> report.log";
system(cmd2); // work
return 0;
}
答案 0 :(得分:2)
您的问题可能是您\n
的输入中存在超出sprintf()
的问题。
fgets()
扫描并存储\n
中的stdin
。您需要摆脱\n
并将其替换为null。asctime()
返回ctime()
返回样式字符串,再次以换行符\n
结束。你也需要删除(替换)。您可以查看以下代码供您参考。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdarg.h>
#include <time.h>
#define MAXLEN 100
char *now(){
time_t t;
time(&t);
return asctime(localtime(&t));
}
int main(int argc, char *argv[])
{
char comment[80] = {0};
char cmd[120] = {0};
char * timestring = NULL; //initialize local variables, good practice
fgets(comment, 80, stdin);
comment[ strlen(comment) -1] = 0; //reomve the trailing \n taken by fgtes(), replace by null
timestring = now();
timestring[strlen(timestring)-1] = 0; //remove the \n from ctime() return style string, replace b null
sprintf(cmd, "echo '%s %s' >> report.log", comment, timestring);
printf(">> The string is : %s\n", cmd);
system(cmd); // should work now.. :-)
return 0;
}