指针在C中混淆

Rad*_*One 3 c pointers character

我是C语言编程的新手,我一直在考虑这个问题很长一段时间了:

char* name;
scanf("%s", name);
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?例如,如果我输入"Hello",程序只会给我一个错误.但是上面的代码与此完全相同吗?

char* name = "Hello";
Run Code Online (Sandbox Code Playgroud)

sim*_*onc 8

char* name;
Run Code Online (Sandbox Code Playgroud)

声明一个指针,但不会将其初始化为指向您已分配的内存.尝试使用scanf导致未定义的行为写入它可能会崩溃.

char* name = "Hello";
Run Code Online (Sandbox Code Playgroud)

声明一个指针并将其初始化为指向字符串文字.字符串文字可以存储在只读内存中,因此您应该将其视为具有类型const char*.

因此,如果要在运行时分配字符串,则这些方法都不起作用.你会,而不是有一个分配内存char阵列,然后使用scanf(或者fgets,readline等)写一个字符串到内存

char name[20];
scanf("%19s", name);
Run Code Online (Sandbox Code Playgroud)