Fro*_*ite 1 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]);
…
}
Run Code Online (Sandbox Code Playgroud)
它应该是一个计算器,例如在我写命令行时:
program.exe 4 + 2
Run Code Online (Sandbox Code Playgroud)
它会给我答案6(不包括此代码).
问题是当我想要繁殖时,我输入例如
program.exe 3 * 4
Run Code Online (Sandbox Code Playgroud)
它似乎创建了一个指针(或者某些东西,不太确定),而不是给我指向char'的char指针*.
问题是我可以得到输入' *'的行为方式与我输入'+'的方式相同吗?
编辑:"*"在命令行中写入工作.有没有办法我只需要打字*?
代码在Windows上运行,这似乎是问题的一部分.
正如@JohnBollinger在评论中所写,你应该使用
/path/to/program 3 '*' 4
Run Code Online (Sandbox Code Playgroud)
它现在写的方式.
但显然需要一些解释.这是因为shell会在将命令行传递给程序之前对其进行解析.*将扩展到目录中的任何文件(UNIX)或类似的东西(windows),空格分隔.这不是你需要的.你无法在你的程序中修复它,因为它为时已晚.(在UNIX上,您可以确保您位于一个空目录中,但这可能没有帮助).
另一种方法是引用整个参数(并适当地重写你的程序),即
/path/to/program '3 * 4'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要使用strtok_r或strsep逐步执行传递的(单个)参数,将其分隔在空格上.
shell如何处理命令行参数超出了程序的范围和控制范围.在程序中没有任何东西可以告诉shell避免执行任何正常的命令处理行为.
但是,我建议,不要依赖shell进行单词拆分,而是让程序期望整个表达式作为单个参数,并使其解析表达式.这不会减轻您对引号的需求,但它会使得结果命令看起来更自然:
program.exe 3+4
program.exe "3 + 4"
program.exe "4*5"
Run Code Online (Sandbox Code Playgroud)
如果扩展程序以处理更复杂的表达式(例如包含括号的表达式(对shell也很重要)),这也会有所帮助.