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

在C程序中调用可执行文件,c,C,我有一个C程序,它将一个参数作为输入,如果参数与可执行文件中的字符串匹配,它将返回1,否则返回0。可执行文件名为prg1。我在一个名为inputs.txt的文件中有一些输入字符串。我想从输入文件中获取这些字符串,并用每个字符串调用C程序中的prg1 我尝试了以下代码,但它不起作用。没有分段错误,但当我调用prg1时,它会执行,因为prg1中的printf语句起作用,我可以看到输出。它将找到的变量更改为0I无法更改prg1。因为我的朋友给了我那个程序的可执行文件,而不是源代码。头文件是stdio.

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

我尝试了以下代码,但它不起作用。没有分段错误,但当我调用prg1时,它会执行,因为prg1中的printf语句起作用,我可以看到输出。它将找到的变量更改为0I无法更改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;
}

我的代码有什么问题?

prog1在查找匹配项时返回1,但1至少在linux系统中表示错误。尝试返回stdlib.h中定义的EXIT_SUCCESS和EXIT_FAILURE。然后,当系统调用返回0时,会找到匹配项,而其他任何东西都找不到匹配项。

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

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


在使用fscanf分配给数组时,还应该检查fopen的返回代码和数组边界

我不确定你想要实现什么,但这里有一些评论:

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

if (!fk) { ... }
2-您没有清理每个测试之间的测试缓冲区,因此您实际上是在调用:

system("prg1 first_word");
system("prg1 first_wordsecond_word");
...
您应该有如下内容:

strcpy(test, "prg1 ");
在进入环路后和strcat之前

3-输入字符串中是否有空格?在这种情况下,您应该修改代码,直到换行


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

请下次包括您包含的库,以及特定的错误消息。对于其他人:一旦编译并运行,它就会因分段错误而退出。哎呀,如果你没有inputs.txt。测试时一定要这样做!