一個簡單的程序,下面用malloc和scanf用%s得到一個字符串如下,給我一個我無法理解的輸出。雖然我只「混雜」了5個字節,但我的輸入字符串已超出上述大小,但沒有分段錯誤。 是scanf overiding malloc分配?malloc和scanf字符串
#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"
我注意到這裏還有一件事情:與
//scanf("%s", name);
輸出顯示
len of 'name'= 0
和 'malloced' 位置實際上memset的爲NULL。但它的calloc而不是malloc,它將分配的字節按照man-page初始化爲0?
這是未定義的行爲,任何事情都可能發生。它甚至可以「工作」。 – hmjd