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

C语言命令行参数读取异常:输入前缀$6$AS$9被截断原因排查

命令行参数含$符号被截断的原因

问题说明

有一段C语言代码如下:

int main(int argc, char *argv[]) { 
    char *strInput = argv[1]; 
    printf("%s\n", strInput); 
}

编译后执行这条命令时:

./a.out $6$AS$9IwGTn5WbHSalUs4ba3JbOfOUX/v1yD71Z4M2F6Yusz5k2WQEOFxqLIY80tudGtcFttqr/Zq6RIPjHkl/t2Pp1

发现原本的$6$AS$9部分被截断,程序只输出后面的字符串。

根本原因

这不是C程序的问题,完全是Shell的变量替换机制导致的:

  • Shell会把以$开头的内容识别成环境变量或Shell变量,自动替换成对应的值。
  • 你输入的命令里,$6、$AS、$9都被Shell解析了:
    • $6代表命令行的第6个位置参数,这里没传第6个参数,所以直接替换成空字符串;
    • $AS如果不是你提前定义过的Shell变量,同样会被替换为空;
    • $9和$6同理,没有对应参数也会变成空。
  • 经过Shell这么一处理,实际传给C程序的参数只剩下IwGTn5WbHSalUs4ba3JbOfOUX/v1yD71Z4M2F6Yusz5k2WQEOFxqLIY80tudGtcFttqr/Zq6RIPjHkl/t2Pp1,程序自然只输出这段内容。

解决办法

要让Shell不解析$符号,有两种常用方式:

  • 用单引号把整个参数包起来(最推荐,单引号会完全禁用Shell的解析功能):
    ./a.out '$6$AS$9IwGTn5WbHSalUs4ba3JbOfOUX/v1yD71Z4M2F6Yusz5k2WQEOFxqLIY80tudGtcFttqr/Zq6RIPjHkl/t2Pp1'
    
  • 给每个$加反斜杠转义:
    ./a.out \$6\$AS\$9IwGTn5WbHSalUs4ba3JbOfOUX/v1yD71Z4M2F6Yusz5k2WQEOFxqLIY80tudGtcFttqr/Zq6RIPjHkl/t2Pp1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:57:53