尝试从命令行获取星号*作为main的输入

时间:2015-12-03 15:09:22

标签: c windows command-line mingw

我试图从命令行向我的main函数发送输入。然后将输入发送到函数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

它似乎创建了一个指针(或者某些东西,不太确定),而不是给我指向char' *'的指针。

问题是我可以获得输入' *'表现方式与我输入' +'?时的行为相同

编辑:在命令行中编写"*"有效。有没有办法我只需要输入*

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

3 个答案:

答案 0 :(得分:7)

@JohnBollinger在评论中写道,你应该使用

/path/to/program 3 '*' 4

目前的写作方式。

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

另一种方法是引用整个论点(并适当地重写你的程序),即

/path/to/program '3 * 4'

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

答案 1 :(得分:6)

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

但是,我建议,不要依赖shell进行单词拆分,而是让程序期望整个表达式作为单个参数,并使其解析表达式。这不会减轻您对引号的需求,但它会使得结果命令看起来更自然:

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

如果您扩展程序以处理更复杂的表达式,例如包含括号的表达式(对shell也很重要),这也会有所帮助。

答案 2 :(得分:2)

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

待办事项

# set -o noglob 

# set -f 

(两者都相同)。

关闭shell globbing。现在,shell不会扩展任何内容,包括*