2013-10-27 46 views
1

我正在寫在C函數/方法是應該做到以下幾點:指針和字符串處理

/** *臨危的論點和副本列表中CONFFILE名稱 *的配置文件。 *如果使用默認文件名 ,則返回1;如果*參數-f存在,則返回2,因此使用 指定名稱。如果有-f *參數 但返回0則無效。 (最後一個參數)
*/

基本上這兩個選項中的一個將是 「詢問」 由程序:

1-控制器-f FCFS | LOOK

2-控制器FCFS | LOOK

如果第二個被問到,我們輸入使用默認名稱的情況。

int get_conf_name(char* argv[], char* conffile) { 

// Searches for -f 

s = strstr(*argv, "-f"); 


if(s != NULL){ 

     if(//its valid){ 
strcpy(conffile, //the name of the file which comes after -f 

return 2 

} 

     else return 0 

} 

else{ 

strcpy(confile, "config.vss") 

return 1 

} 

} 

這裏的問題是如何獲得-f後的單詞並將其複製到confile中?而且,我可以像訪問conffile一樣訪問argv,因爲其中一個是數組? 我想過使用for循環和strlen,但那會是很多不必要的工作,對於電腦來說不是嗎?

+0

這不是'strstr'的​​工作方式。 'strstr'在另一個字符串(乾草堆)中查找子字符串(針)。你想要的是在字符串數組中尋找整個字符串。你應該使用一個循環。 –

+0

順便說一句:選項是「傳遞給」(而不是「由」)的程序。除非你指的是調用者程序。 –

+0

@Giulio Franco哦謝謝:D通過問我的意思有兩種可能的選項供用戶詢問程序 – BVCGAAV

回答

3

我認爲這項作業希望你逐個瀏覽個別論點,並將它們與"-f"進行比較。

  • 如果您沒有看到-f,你知道,默認的文件需要使用
  • 如果你看到在最後位置的標誌,你知道-f無效
  • 如果你看到國旗在位置k,然後鍵入文件名會在argv[k+1]

程序的骨架應該是這樣的:

bool foundFlag = false; 
for (int i = 1 ; i < argc ; i++) { 
    if (strcmp(argv[i], "-f") == 0) { 
     if (i == argc-1) { 
      // Error 
     } else { 
      // argv[i+1] is the file name; 
     } 
     foundFlag = true; 
     break; 
    } 
} 
if (!foundFlag) { 
    // Default name is used 
} 
+0

謝謝,骨架是非常乾淨和可以理解的:D所以現在,我可以直接使用argv [i + 1] strcpy對不對?但是[i + 1]不會指向空間而不是名字的第一個字符? – BVCGAAV

+0

@ ipg24就是這樣 - 空格和製表符在被標記時從原始命令字符串中取出。只保留非空白字符。 – dasblinkenlight

+0

理解:)非常感謝,現在我知道如何構建和編寫整個事情! – BVCGAAV