scanf的第一个参数是输入格式,第二个参数是输入内容的存放导致。scanf("%s",p[2])第二个参数错误,p[2]不是一个内存地址,而是一个字符scanf("%s",&str[2])第二个参数正确,&str[2]是一个内存地址,指向的内存是str[20]这块内存缓存区的第3个字符所在的地址,因为前面有一个&取值运算符。