尝试从命令行获取星号*作为主input

我试图从命令行发送input到我的主要function。 input然后被发送到函数checkNum等。

int main(int argc, char *argv[]) { int x = checkNum(argv[1]); int y = checkNum(argv[3]); int o = checkOP(argv[2]); … } 

它应该是一个计算器,例如,当我写在命令行中:

 program.exe 4 + 2 

它会给我答案6(代码不包括在内)。

问题是当我想要乘以和我键入例如

 program.exe 3 * 4 

它看起来像创build一个指针(或者不太确定),而不是给char指向字符' * '。

问题是我可以得到input“ * ”的行为方式,当我input“+”?

编辑:写在命令行工作"*" 。 有没有一种方法,我只需要input*

代码在Windows上运行,这似乎是问题的一部分。

Solutions Collecting From Web of "尝试从命令行获取星号*作为主input"

如果您不想使用单引号( ' )或双引号( " ),则可以关闭shell通配符。

 # set -o noglob 

要么

 # set -f 

(都是等价的)。

关闭壳牌。 现在,外壳不会扩展任何球体,包括*

正如@JohnBollinger在评论中写的,你应该使用

 /path/to/program 3 '*' 4 

这是目前写的方式。

但是一些解释显然是需要的。 这是因为shell在将它传递给程序之前会解析命令行。 *将扩展到目录(UNIX)或类似的东西(窗口)中的任何文件,空格分开。 这不是你所需要的。 你无法修复它,因为它太晚了。 (在UNIX上,你可以确保你在一个空目录,但可能没有帮助)。

解决这个问题的另一个方法是引用整个参数(并且适当地重写你的程序),即

 /path/to/program '3 * 4' 

在这种情况下,您将需要使用strtok_rstrsep来逐步通过传递的(单个)参数,将其分隔在空间上。

shell如何处理命令行参数超出了程序的范围和控制范围。 程序中没有任何东西可以告诉shell避免执行任何正常的命令处理行为。

然而,我建议,不要依赖shell来分词,而是让程序将整个表达式作为一个单独的参数,并用它来解析表达式。 这并不能解除你对报价的需求,但是它会使得生成的命令看起来更加自然:

 program.exe 3+4 program.exe "3 + 4" program.exe "4*5" 

如果你扩展你的程序来处理更复杂的表达式,比如那些包含括号的表达式(这对于shell来说也是很重要的),这也将有所帮助。