为什么 scanf("%s") 与 char* 的行为很奇怪?

Sof*_*fle 2 c string scanf

我试图解决这个问题

当我创建一个char *并将其传递给 scanf 时:

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

它的行为很奇怪
但是,当我更改定义并将 1000 个字符初始化为\0

char input[1000] = { '\0' };
Run Code Online (Sandbox Code Playgroud)

它表现得很好。为什么会这样?

Dan*_*ker 6

我猜你看到的是分段错误。当您声明时char* input = "";,您将导致input成为指向字符串文字的指针。字符串文字存储在内存的只读部分。因此,试图覆盖数据scanf是对内存的无效使用。

但是,当您声明 时char input[1000];,您现在在堆栈上有一个数组,这是可以写入的内存部分。这就是该代码有效的原因。