如何获得正确数量的C++命令行参数?

seg*_*ult 0 c++ ubuntu

我开始我的程序

int main (int argc, char *argv[]) {
    printf("%d \n", argc);
Run Code Online (Sandbox Code Playgroud)

然后我使用g ++在Ubuntu中编译,然后运行程序

./calc 2 3 4 + *
Run Code Online (Sandbox Code Playgroud)

但程序输出17!我也对参数做了一个printf,它们是:

arg 0: ./calc 
arg 1: 2 
arg 2: 3 
arg 3: 4 
arg 4: + 
arg 5: 1.2.c 
arg 6: 1.3.c 
arg 7: 1.4.c 
arg 8: 2.1.c 
arg 9: 2.2.c 
arg 10: 2.3.c 
arg 11: 2.4.c 
arg 12: 3.2.c 
arg 13: 3.4.c 
arg 14: 4.1.c 
arg 15: a.out 
arg 16: calc 
Run Code Online (Sandbox Code Playgroud)

但显然这不是我所期待的.我怎么能纠正这个?

hea*_*vyd 21

*是由你的shell评价,意味着所有的文件的当前目录.你应该使用避开星号\*.


hil*_*lel 12

linux shell将*解释为目录中所有文件的列表.尝试使用"\"转义它,例如

./calc 2 3 4 + \*
Run Code Online (Sandbox Code Playgroud)

要么

./calc 2 3 4 + "*"
Run Code Online (Sandbox Code Playgroud)