strtok和逃脱角色

时间:2012-09-24 15:56:48

标签: c shell escaping strtok

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

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

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

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

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

考虑编写解析器。只需循环输入中的每个字符并决定如何处理该字符:空格前进到下一个参数,反斜杠逐字复制下一个字符,引号启动引用的上下文等。这是一种更灵活的方式来处理输入,并且你不会受到strtok的限制。

答案 1 :(得分:0)

只需将第二个参数更改为strtok,从" "更改为" \"(“分隔符”)。这些字符将决定用户输入被分割为标记的位置,因此它们都不会进入标记列表。有关strtok的详细信息,请参阅here

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