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