为什么当我使用**时,Windows将我的目录列表注入argv

Why is Windows injecting my directory listing into argv when I use **?

本文关键字:我的 列表 argv 注入 为什么 Windows      更新时间:2023-10-16

主要方法如下:

int main(int argc,char** argv)
{
    std::string expression=argv[1];
    for(int i=2;i<argc;i++)
    {
        expression+=' ';
        expression+=argv[i];
    }
    std::cout << expression << std::endl << std::endl;
    Expression* expr = Expression::build(expression.c_str());
    std::cout << expr->evaluate() << std::endl;
    delete expr;
    return 0;
}

由于某些原因,这在大多数情况下都很有效,但请参阅以下输入/输出示例:

D:TylerDesktop>a 2**3
2**3
8
D:TylerDesktop>a 2 ** 3
2 10284556_10203827451228798_9031461414658797199_o.jpg 15686-vanille.p3t 18
865-MiraiNikki.p3t 20777-MIRRORSEDGE2AnimatedTheme.p3t [APE] gras.gpl [Irfa
nView] [APE] gras.pal a.exe arboles_FM.png calc.c calc.cpp couch.png deskto
p.ini gras.pal hackzorz log.txt montanas_FM.png p3textractor p3textractor.z
ip PALLET TOWN.bmp PALLET TOWN.png Pokemon FireRed.bak Pokemon FireRed.gba
Pokemon FireRed.ini Pokemon FireRed.zip ROM Hackers GBA Tool Pack roms send
eros_cope.png senderos_FM.png Thumbs.db Tileset0.bmp Tileset0.pal untitled.
bmp untitled.PNG wdps 3

我有一种感觉,这是某种窗口的事情,还是我遗漏了一些重要的东西?

**在许多shell(包括windows)中是一个经典的"通配符"。它将被替换为当前目录下所有文件的列表。

因此,您可以执行del *删除所有文件。使用多个*'s与使用单个*'s相同。