通过C

时间:2019-05-07 18:21:35

标签: c bash ubuntu io main

我有一个程序,可以从命令行读取自然语言的句子并对其进行处理。

某些标点符号不被接受:要么收到一条特定的错误消息(例如使用括号时),要么得到>(例如,当我键入'时),就像终端还在等什么。

一种快速的解决方法是在引号中包含单个“有问题的”单词,但对我来说似乎不是一个很好的解决方法。

是否没有一种方法可以使命令行准备好将任何字符用作有效输入,而无需'用户'考虑是否要在引号中包含什么?

出于完整性考虑,这就是我对命令行内容进行编码的方式:int main(int argc , char ** argv){,我想这是标准方式。

我正在使用最后一个Ubuntu,不知道这是否有意义。

3 个答案:

答案 0 :(得分:5)

这里的问题与程序无关,而与调用程序有关。

从shell(如bash)调用程序时,shell将尝试帮您一个忙,并在空白处分割命令行参数。它还将解释特殊字符,例如>;(,以进行重定向,拆分命令和启动子shell。

要关闭此行为,必须对这些特殊字符进行转义,方法是在其前面加上\或将命令行参数括在单引号或(仅在大多数情况下)双引号中。

仅当您的程序由Shell执行时,才需要这样做。如果它是由您控制的程序执行的,则可以直接控制传递给程序的参数列表(程序的argv函数中的main())。

答案 1 :(得分:1)

这里的问题不在于C。这是命令行的工作方式。有些字符有特殊含义。引号允许您覆盖它。那就是“解决办法”。

答案 2 :(得分:0)

您可以通过\跳过输入。 因此,脚本不会解释角色。取而代之的是,它会杂乱地考虑它。