我正在用C,關於空間字符使用strtok的外殼(」「)創建的用戶輸入參數列表。例如,strtok'ls foo bar'創建一個包含三個元素的char *:ls,foo,bar。的strtok和轉義字符
我的問題是,我怎樣檢測逃生空間?
例如,strtok的 'LS FOO \ bar' 的創建一個char **包含三個元素:LS FOO \,巴。但它應該創建一個char *有兩個要素:LS,富巴
我怎樣才能做到這一點?
我正在用C,關於空間字符使用strtok的外殼(」「)創建的用戶輸入參數列表。例如,strtok'ls foo bar'創建一個包含三個元素的char *:ls,foo,bar。的strtok和轉義字符
我的問題是,我怎樣檢測逃生空間?
例如,strtok的 'LS FOO \ bar' 的創建一個char **包含三個元素:LS FOO \,巴。但它應該創建一個char *有兩個要素:LS,富巴
我怎樣才能做到這一點?
只需將第二個參數從" "
更改爲" \"
(「分隔符」)即可。這些字符將決定用戶輸入分成令牌的位置,因此它們都不會將其放入令牌列表中。有關strtok的更多信息,請參閱here。
編輯:對不起,我誤解了你。以上建議只會刪除\
s。我同意手動解析是最好的選擇。例如,使用fgetc()
來獲取角色最容易。
您將無法使用strtok
,因爲strtok
不理解轉義字符。你可以嘗試解決這個問題,但最終如果你想支持引用的論點等事情,你會想要一個更靈活的方法。
請考慮改爲編寫解析器。只需循環輸入中的每個字符並決定如何處理該字符:空格前進到下一個參數,反斜槓逐字複製下一個字符,引號開始引用上下文等等。這是處理輸入的更加靈活的方式,並且你將不會受到strtok
的限制。
謝謝,我將開始解析器功能 – user1687558