为什么我需要分配内存?

Har*_*ary 0 c arrays malloc printf pointers

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

void main()
{
char *arr;
arr=(char *)malloc(sizeof (char)*4);
scanf("%s",arr);
printf("%s",arr);
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,我真的需要分配arr吗?即使不使用malloc也能给我结果.我的第二个疑问是'我期待第9行出错,因为我认为它必须是printf("%s",*arr); 或者其他的东西.

Oli*_*rth 5

我真的需要分配arr吗?

是的,否则您将取消引用未初始化的指针(即写入随机内存块),这是未定义的行为.