argv数组中的元素错误[重复]

问题描述 投票:2回答:1

此问题已经在这里有了答案:

我正在尝试从命令行获取必需的参数。输入示例:

./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

这可能有什么问题,因为我什至无法搜索它?谢谢。

c++ arguments argv
1个回答
2
投票

外壳将展开*,就像您运行ls *一样。调用方将需要引用它以防止其扩展。

./calc 2 '*' 4
./calc 2 "*" 4
./calc 2 \* 4

或者,如果您的程序可以将单个字符串分解为多个标记,则调用方可以引用所有内容。

./calc '2 * 4'

[您可能想知道您的程序中是否可以做一些事情让用户不要引用*。不,没有。您无能为力。到您的代码开始运行时,为时已晚。这个小球已经展开。

© www.soinside.com 2019 - 2024. All rights reserved.