在C程序中调用可执行文件

时间:2011-03-19 14:10:31

标签: c

我有一个C程序,它将一个参数作为输入,如果参数与可执行文件中的字符串匹配,它将返回1,否则为0.可执行文件名为prg1。我在名为inputs.txt的文件中有一些输入字符串。我想从输入文件中获取这些字符串,并使用每个字符串调用C程序中的prg1

我已经尝试了下面的代码,但它没有工作。没有分段错误但是当我调用prg1它执行时,因为prg1中的printf()语句正在工作,我可以看到output.it更改变量发现0我不能改变prg1。因为我的朋友给了我那个程序的可执行文件,而不是源代码。头文件是stdio.h和string.h

int main()
{
    FILE *fk;
    char text[80],inp[16],test[50]={"./prg1 "};
    int found=100;
    fk=fopen("inputs.txt","r");
    while((fscanf(fk,"%s",inp))!=EOF)
    {
        strcat(test,inp);
        found=system(test);
        if(found==1)
        {
            printf("\nAnswer is   : %s",inp);
            break;
        }
            strcpy(test,"./prg1 ");

    }
    fclose(fk);
    return 0;
}

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:0)

找到匹配时,

prog1返回1,但1表示错误(至少在linux系统中)。请尝试返回EXIT_SUCCESSEXIT_FAILURE(在stdlib.h中定义)。然后,当system()调用返回0时,找到匹配,否则找不到匹配。

答案 1 :(得分:0)

代码中的基本缺陷是,在调用strcat将下一个参数添加到主循环之前,需要在主循环的每次迭代开始时将'test'数组的内容重置为“prg1”。命令行。否则,每次迭代时,要运行的命令将继续变长,因为每个输入读取都会添加到现有命令中。我认为这不是你想要的。

例如,给定两行输入“foo”和“bar”,循环的第一次迭代将导致命令“prg1 foo”被执行,而第二次将导致“prg1 foobar”被执行。检查的一种简单方法是在调用system()之前插入printf(或类似的)以显示将要执行的命令。

使用fscanf分配数组时,还应该检查fopen的返回码并检查数组边界。

答案 2 :(得分:0)

我不确定你想要达到的目的,但这里有一些评论:

1 - 您应该测试fopen的返回值:

if (!fk) { ... }

2 - 您没有在每次测试之间清除test缓冲区,因此您实际上是在呼叫:

system("prg1 first_word");
system("prg1 first_wordsecond_word");
...

你应该有类似的东西:

strcpy(test, "prg1 ");

进入循环后strcat之前。

3 - 输入字符串中是否有空格?在这种情况下,您应该修改代码以读取新行。

4 - 您可能希望使用EXIT_SUCCESSEXIT_FAILURE而不是0和1。