ciąg malloc i scanf
Prosty program poniżej z malloc i scanf z% s, aby uzyskać ciąg jak poniżej, daje mi dane wyjściowe, których nie mogę zrozumieć. Podczas gdy mam „malloced” tylko 5 bajtów, mój ciąg wejściowy przekroczył powyższy rozmiar, ale nie ma błędu segmentacji. Czy scanf zastępuje alokację 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"
Zauważyłem jeszcze jedną rzecz: z
//scanf("%s", name);
pokazuje wyjścia
len of 'name'= 0
a lokalizacje „malloced” były faktycznie memset do NULL. Ale jego calloc, a nie malloc, który inicjalizuje przydzielone bajty do 0, jak na stronę podręcznika?