system()不起作用

时间:2015-03-23 06:46:30

标签: c

我的程序读取标准输入并将其存储到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;
}

1 个答案:

答案 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;
}