cuerda malloc y scanf

Un programa simple a continuación con malloc y scanf con% s para obtener una cadena como la que aparece a continuación, me da una salida que no puedo comprender. Si bien he 'centrado' solo 5 bytes, mi cadena de entrada ha excedido el tamaño anterior pero no hay falla de segmentación. ¿Scanf está anulando la asignación de malloc?

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

int main() {
  char * name;
  int SZSTRING;

    printf("Enter size of name :");  
    scanf("%d", &SZSTRING);
    name = (char*) malloc ((SZSTRING + 1) * sizeof(char));

    printf("Enter name :");
    scanf("%s", name);
    printf("len of 'name' : %d\n",strlen(name));

  printf("name final: \"%s\"\n",name);
  free(name);

return 0;
}

Output:

OptiPlex-380:~/gsa/compile$ gcc -o try try.c 
OptiPlex-380:~/gsa/compile$ ./try 
Enter size of name :4
Enter name :qwertyui
len of 'name' : 8
name final: "qwertyui"

Noté una cosa más aquí: con

    //scanf("%s", name);

muestra de salida

len of 'name'= 0

y las ubicaciones 'mal ubicadas' en realidad se han unido a NULL. ¿Pero su calloc y no malloc, que inicializa los bytes asignados a 0 según la página de manual?

Respuestas a la pregunta(3)

Su respuesta a la pregunta