c++ - linux环境命令行参数

标签 c++ linux

我是一名 Windows 程序员,现在我正在学习在 Linux 环境下编程,我使用的是 LinuxMint15。

我遇到了一个“奇怪”的问题,命令行参数不是我输入的。 程序 super 简单:

#include <stdio.h>
int main(int argc, char* argv[])
{
    printf("cmd line=");
    for(int i=0;i<argc;i++){
        printf("%s ", argv[i]);
    }
    printf("\n");
    return 0;
}

然后编译运行,效果如我所愿:

roy@xx ~ $ gcc -o cl test_cl.cpp
roy@xx ~ $ ./cl 1 2
cmd line=./cl 1 2 

但是当我在末尾键入 * 时,它会列出文件夹中的所有文件名......:

roy@xx ~ $ ./cl 1 2 *
cmd line=./cl 1 2 Public Template Video Picture Docs Desktop cl test_cl.cpp test.txt untitled

发生了什么事?

最佳答案

大多数 Linux shell 会特殊处理字符 ?*。特别是,它们用于通配模式以匹配文件名。在这种情况下,shell 将 * 扩展为当前目录中的所有文件,然后将该列表作为命令行参数发送给您的程序。如果你想要一个文字 *,你需要用 \* 转义它或者用 '*' 引用它。

关于c++ - linux环境命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22739267/

相关文章:

c++ - 类具有相同的接口(interface),但参数类型不同

c++ - CRT & new - 92 字节的 30 次调用给出 "bad_alloc nomem"

Linux POSIX 合规列表

linux - 以前安装的 Tomcat 提示缺少文件 - 初学者

c++ - 如何在不关闭套接字的情况下取消异步读/写?

c++ - 自定义交互式 shell

c - C中的String Inverter Program中的警告

linux - 为什么 linux 内核中的这段代码不会导致死循环?

linux - 当计算机切换到 sleep 模式时,TCP 连接会发生什么变化?

c++ - 如何使用opencv播放视频?