下面的一个简单程序使用 malloc 和 scanf 和 %s 来获取如下字符串,给了我一个我无法理解的输出。虽然我只“分配”了 5 个字节,但我的输入字符串已超过上述大小但没有分段错误。scanf 是否覆盖 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"
我在这里注意到另一件事:与
//scanf("%s", name);
输出显示
len of 'name'= 0
并且“分配”的位置实际上被 memset 为 NULL。但是它的 calloc 而不是 malloc 根据手册页将分配的字节初始化为 0???