我正在使用argv来存储命令行中的字符。我只是注意到,如果我输入#
,我得到的是null而不是字符#
。为什么会这样?
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("%c",argv[1][0]);
}
上面的代码适用于任何字符,但#
除外,它返回分段错误(核心转储)。
答案 0 :(得分:8)
#
字符表示对shell的评论的开始,因此它永远不会到达您的程序。因此,argv
只有一个元素,即argv[0]
,因此访问argv[1]
正在读取数组的末尾。这会调用undefined behavior,在这种情况下会出现崩溃。
为了让shell将这个特殊字符传递给你的程序,你需要引用它:
./myprogram "#"