为什么我可以输入超过7个字母?

scanf遇到EOF才结束,你这里是回车。而printf遇到0才结束,char的第7位被scanf读入后就不是0了。C语言并不检查越界行为,所谓的缓冲区溢出就是这个原理。

你的代码我跑不了,改成我这样才行。

#include<stdio.h>
#include<stdlib.h>
int main(void){
	char* ch=0;
	ch =(char*)malloc(sizeof(char)*8);
	scanf("%s",ch);
	printf("%s",ch);
	free(ch);
	return 0;
}

从main函数的第二行可以看出,我开辟了8个内存地址,但返回的是一个指向字符指针,输入的字符串存放在指针ch指向的空间,此时输入的字符串长度不限,但可能会引起其他程序问题。