为什么argv上的字符#为null

时间:2017-12-08 18:39:18

标签: c arguments

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

#include <stdio.h>

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

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

1 个答案:

答案 0 :(得分:8)

#字符表示对shell的评论的开始,因此它永远不会到达您的程序。因此,argv只有一个元素,即argv[0],因此访问argv[1]正在读取数组的末尾。这会调用undefined behavior,在这种情况下会出现崩溃。

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

./myprogram "#"