0

我正在使用 C 语言中的 shell,它在空格字符('')上使用 strtok 从用户输入创建参数列表。例如,strtok 'ls foo bar' 创建一个包含三个元素的 char*:ls、foo、bar。

我的问题是,如何检测逃逸空间?

例如,strtok 'ls foo\ bar' 创建一个包含三个元素的 char**:ls、foo\、bar。但它应该创建一个包含两个元素的 char*:ls、foo bar

我怎样才能做到这一点?

4

2 回答 2

2

您将无法使用strtok,因为strtok不理解转义字符。您可以尝试解决这个问题,但最终如果您想支持引用参数之类的东西,您将需要一种更灵活的方法。

考虑改为编写解析器。只需遍历输入中的每个字符并决定如何处理该字符:空格前进到下一个参数,反斜杠逐字复制下一个字符,引号开始引用的上下文等。这是一种更灵活的处理输入的方式,并且您将不受strtok.

于 2012-09-24T16:08:25.187 回答
0

只需将 strtok 的第二个参数从更改" "" \"(“分隔符”)。这些字符将确定用户输入在何处拆分为标记,因此它们都不会进入标记列表。有关 strtok 的更多信息,请参见此处

编辑:对不起,我误解了你。上述建议只会删除\s. 我同意手动解析是要走的路。一次获取一个字符是最简单的,fgetc()例如使用 .

于 2012-09-24T16:04:57.097 回答