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指向的空间,此时输入的字符串长度不限,但可能会引起其他程序问题。