2011-03-19 49 views
0

內可執行文件我有一個C程序,它將一個參數作爲輸入,並且,如果該參數被與所述可執行內的字符串匹配時,它將返回1否則返回0的可執行文件的名稱是prg1。我在一個名爲inputs.txt的文件中有一些輸入字符串。我想從輸入文件中獲取這些字符串,並在每個字符串的C程序中調用prg1調用C程序

我嘗試了下面的代碼,但它不工作。沒有分段錯誤,但當我調用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; 
} 

什麼是錯我的代碼?

+0

請,下一次包含您已經包含了庫和特定錯誤消息。對於其他人:一旦編譯並運行,就會用'Segmentation Fault'離開。哎呀,那就是如果你沒有inputs.txt。確保你在測試時做! – Yuri 2011-03-19 14:15:21

回答

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

0

prog1返回1找到匹配時,但1個代表錯誤(至少在Linux系統)。請返回EXIT_SUCCESSEXIT_FAILURE(在stdlib.h定義)。然後,當system()調用返回0,在比賽中發現,當別的,沒有發現匹配。

0

代碼中的根本缺陷是,在調用strcat將下一個參數添加到主循環的每次迭代開始時,您需要將'test'數組的內容重置爲「prg1」命令行。否則,由於每個輸入讀取都添加到現有命令中,所以要運行的命令在每次迭代中只會持續變長。我不認爲這是你的意圖。例如,給定兩行輸入「foo」和「bar」,循環的第一次迭代將導致命令「prg1 foo」被執行,而第二次將導致「prg1 foobar」被執行,而第二次將導致「prg1 foobar」執行。一個簡單的方法來檢查,即在調用system()之前插入一個printf(或類似的)來顯示要執行的命令。

您還應該檢查的FOPEN返回代碼,並檢查數組邊界使用的fscanf指派給磁盤陣列時。