You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言命令行参数传递"*"时出现目录文件列表异常问题

问题原因与解决方法

这是shell通配符扩展导致的问题:

  • shell会把*当作通配符,自动替换成当前目录下所有非隐藏文件的名称,所以你执行./program 1 * 1时,实际传递给程序的参数是./program、1、当前目录的所有文件名、1,这就出现了你看到的异常输出。
  • 而+不是shell的特殊通配符,所以不会被扩展,能正常传递给程序。

解决办法

传递*时,需要阻止shell的通配符扩展,有三种常用方式:

  1. 用单引号包裹*:
    ./program 1 '*' 1
    
  2. 用双引号包裹*:
    ./program 1 "*" 1
    
  3. 用反斜杠对*进行转义:
    ./program 1 \* 1
    

采用以上任意一种方式,*都会被当作普通字符串传递给程序,argv[2]就能正确获取到*了。

内容的提问来源于stack exchange,提问作者Reeson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:15:31