请问各位高手,C语言以这样的方式创建的字符串为什么出现了奇怪的现象

#include <stdio.h>
#include <stdlib.h>

int main() {
    char* string;
    string = (char*)malloc(5*sizeof(char));
    scanf("%s", string);
    printf("%s", string);
}

本以为这样创建的字符串等于string[5],没想到能输入很长的字符串并且没有发生错误,请问各位高手,这是为什么?

c语言不会对下标检查
但是这样可能会破坏别的变量

换个编译器看看吧,我用的VC输入超过四个数就会报错