C语言命令行参数传递"*"时出现目录文件列表异常问题
问题原因与解决方法
这是shell通配符扩展导致的问题:
- shell会把
*当作通配符,自动替换成当前目录下所有非隐藏文件的名称,所以你执行./program 1 * 1时,实际传递给程序的参数是./program、1、当前目录的所有文件名、1,这就出现了你看到的异常输出。 - 而
+不是shell的特殊通配符,所以不会被扩展,能正常传递给程序。
解决办法
传递*时,需要阻止shell的通配符扩展,有三种常用方式:
- 用单引号包裹
*:./program 1 '*' 1 - 用双引号包裹
*:./program 1 "*" 1 - 用反斜杠对
*进行转义:./program 1 \* 1
采用以上任意一种方式,*都会被当作普通字符串传递给程序,argv[2]就能正确获取到*了。
内容的提问来源于stack exchange,提问作者Reeson
相关产品推荐
相关产品推荐

