为什么argv上的字符#为null

Jul*_*esR 3 c arguments

我正在使用argv来存储命令行中的字符.我只是注意到,如果我输入,#我得到一个空而不是字符#.为什么会这样?

#include <stdio.h>

int main(int argc,char *argv[])
{
    printf("%c",argv[1][0]);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于任何字符,除了#返回分段错误(核心转储).

dbu*_*ush 8

#字符表示对shell的注释的开始,因此它永远不会到达您的程序.结果,argv只有一个元素,即argv[0]访问argv[1]是从数组的末尾读取.这会调用未定义的行为,在这种情况下会出现崩溃.

为了让shell将这个特殊字符传递给您的程序,您需要引用它:

./myprogram "#"
Run Code Online (Sandbox Code Playgroud)