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?