我用
开始我的程序int main (int argc, char *argv[]) {
printf("%d \n", argc);
然后我使用g ++在Ubuntu中编译,然后使用
运行程序./calc 2 3 4 + *
但程序输出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
但显然这不是我所期待的。我怎么能纠正这个?
答案 0 :(得分:21)
shell正在评估*
是指当前目录中的所有文件。您应该使用\*
转义星号。
答案 1 :(得分:12)
linux shell将*解释为目录中所有文件的列表。尝试使用“\”转义它,例如
./calc 2 3 4 + \*
或
./calc 2 3 4 + "*"