2011-10-04 91 views
1

我寫了一個小程序,打印幫助信息如果參數未通過。如何獲得特定字符後的所有文本?

如果我運行不帶參數的應用

./myApp 

它打印

./myApp --filename=file 

我知道的argv [1]持有的第一個參數,但我無法弄清楚如何獲取「=」之後的文本,即文件的名稱。

回答

2

而不是手動解析字符串,而應該使用getopt()getopt_long()

他們做骯髒的工作,爲您和人們期望它的行爲方式(而自寫解析器有時令人困惑 - 一些使用--arg value,別人--arg=value,有的甚至是用-arg value

0

你必須自己解析它。 strtok對此非常有用,另一個是strstr。還有一些準備好的庫,如果您不想自己編寫所有這些文件,例如this one,則允許您將此功能導入到項目中。

0

strchr()返回指向該字符的指針。接下來的字符是你想要什麼

char *equals; 
equals = strchr(argv[1], '='); 
if (equals) { 
    printf("Rest of argument: %s\n", equals + 1); 
} else { 
    printf("No equal found in argv[1] (%s)\n", argv[1]); 
} 

根據您的具體需求,您可能想複製的地方他們或者只是使用他們的權利從的argv [1]的說法。

+0

我試過的代碼你建議,但我得到這樣的警告 - 傳遞的「和strchr」參數2從指針整數,未作鑄 – jingo

+0

你也許寫雙引號分隔'='?他們是單引號! – pmg

0

使用strchr函數查找'='字符。檢查strchr返回值。如果返回值爲非NULL,則將其增加1,然後獲得所需的值。

0

argv中的字符串是由空格分開,所以你將不得不解析的argv [1]串取後「=」的文字。但是有一些功能叫做getopt()getopt_long(),它們是POSIX標準的一部分。

如果您可以使用此功能,則可以使用getopt_long()同時獲得短選項和長選項(例如文件名)及其參數(例如文件)。

鏈路包括解釋和舉例: http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_22.html

相關問題