此问题已经在这里有了答案:
我正在尝试从命令行获取必需的参数。输入示例:
./calc 2 * 4
一切似乎都很好,直到我尝试输出argv数组。这就是我得到的:
./calc 2 Makefile Stack.cpp Stack.h Stack.h.gch Stack.o a.out calc main.cpp main.o 4
这些完全是本地目录中的所有文件。这是我的输出的代码:
for (int i = 0; i < argc; i++)
cout << string(argv[i]) << ' ';
这是我的Makefile:
CC=clang++
all: calc
calc: main.o stack.o
$(CC) -o calc main.o stack.o
main.o: main.cpp Stack.h
$(CC) -c -std=c++14 -stdlib=libc++ main.cpp
stack.o: Stack.cpp Stack.h
$(CC) -c --std=c++14 -stdlib=libc++ Stack.cpp
clean:
rm -rf *.o calc
这可能有什么问题,因为我什至无法搜索它?谢谢。
外壳将展开*
,就像您运行ls *
一样。调用方将需要引用它以防止其扩展。
./calc 2 '*' 4
./calc 2 "*" 4
./calc 2 \* 4
或者,如果您的程序可以将单个字符串分解为多个标记,则调用方可以引用所有内容。
./calc '2 * 4'
[您可能想知道您的程序中是否可以做一些事情让用户不要引用*
。不,没有。您无能为力。到您的代码开始运行时,为时已晚。这个小球已经展开。