Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$C中的命令行参数后跟字符_C_Command Line - Fatal编程技术网

$C中的命令行参数后跟字符

$C中的命令行参数后跟字符,c,command-line,C,Command Line,我刚刚用c语言写了一个程序,它使用命令行参数,我试着打印第一个参数。当我用下面的命令执行程序时 ./a.out $23 并尝试使用下面的代码打印第一个参数 printf("%s", argv[1]); 输出刚刚好 3 如果存在一些特殊字符,那么命令行参数的处理方式会有所不同。有人能解释这种行为吗。您需要转义$字符 试试这个: ./a.out \$23 大概,$2被视为shell变量。尝试避开美元符号: ./a.out \$23 shell将$23视为位置参数$2,后跟文字字符3。要传递

我刚刚用c语言写了一个程序,它使用命令行参数,我试着打印第一个参数。当我用下面的命令执行程序时

./a.out $23
并尝试使用下面的代码打印第一个参数

printf("%s", argv[1]);
输出刚刚好

3

如果存在一些特殊字符,那么命令行参数的处理方式会有所不同。有人能解释这种行为吗。

您需要转义
$
字符

试试这个:

./a.out \$23

大概,
$2
被视为shell变量。尝试避开美元符号:

./a.out \$23

shell将
$23
视为位置参数
$2
,后跟文字字符3。要传递字符串“$23”,请执行以下操作之一

./a.out \$23

要传递shell的第23个位置参数(不太可能,但可能),可以编写

./a.out ${23}
你必须像这样“抑制”你的论点:

./a.out \$23
有些字符由shell解释。这些字符包括以下内容:

  • \
    禁止(转义)后面的字符(适用于空格、制表符或您的情况)
  • *
    表示任何单个或多个字符串的
  • $
    表示变量(在您的示例中,shell理解变量$23,而不是字符串“$23”)
  • |
    |
    允许在命令中进行解析或通过管道传输命令
  • &
    &
    允许命令组合或允许使用作业控制
  • 允许shell分隔字符串
  • ,它允许shell不解释带有特殊字符的字符串
  • 用于分隔命令
  • `
    解释其中两个命令所包含的命令,并返回命令的输出
./a.out \$23