我寫了一個小程序,打印幫助信息如果參數未通過。如何獲得特定字符後的所有文本?
如果我運行不帶參數的應用
./myApp
它打印
./myApp --filename=file
我知道的argv [1]持有的第一個參數,但我無法弄清楚如何獲取「=」之後的文本,即文件的名稱。
我寫了一個小程序,打印幫助信息如果參數未通過。如何獲得特定字符後的所有文本?
如果我運行不帶參數的應用
./myApp
它打印
./myApp --filename=file
我知道的argv [1]持有的第一個參數,但我無法弄清楚如何獲取「=」之後的文本,即文件的名稱。
而不是手動解析字符串,而應該使用getopt()
或getopt_long()
。
他們做骯髒的工作,爲您和人們期望它的行爲方式(而自寫解析器有時令人困惑 - 一些使用--arg value
,別人--arg=value
,有的甚至是用-arg value
)
你必須自己解析它。 strtok
對此非常有用,另一個是strstr
。還有一些準備好的庫,如果您不想自己編寫所有這些文件,例如this one,則允許您將此功能導入到項目中。
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]的說法。
使用strchr函數查找'='字符。檢查strchr返回值。如果返回值爲非NULL,則將其增加1,然後獲得所需的值。
,而不是分析的東西你自己,你可以使用argp libc中參數的解析器:
argv中的字符串是由空格分開,所以你將不得不解析的argv [1]串取後「=」的文字。但是有一些功能叫做getopt()
和getopt_long()
,它們是POSIX標準的一部分。
如果您可以使用此功能,則可以使用getopt_long()
同時獲得短選項和長選項(例如文件名)及其參數(例如文件)。
鏈路包括解釋和舉例: http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_22.html
我試過的代碼你建議,但我得到這樣的警告 - 傳遞的「和strchr」參數2從指針整數,未作鑄 – jingo
你也許寫雙引號分隔'='?他們是單引號! – pmg