C语言用setvbuf()设置缓冲区的问题

想设置一个无缓冲立即回显,代码如下:
#include
#include
int main(void){
char ch;
char buf[1024];
setvbuf(stdin,NULL,_IONBF,0);
setvbuf(stdout,NULL,_IONBF,0);
while((ch=getc(stdin))!='p'){
putc(ch,stdout);
}

return 0;

}
但是明明设置的是_IONBF在程序运行的时候依旧没有输入一个字符不按回车就立即回显,请问这是什么原因呢?谢谢了

char p[]={“a”,“b”,“c”};
printf("%d",strlen(p));

_IONBF 是**不**使用缓冲区。你哪里用到 buf 了?