C 为什么在使用指针变量时出现分段错误?

C 为什么在使用指针变量时出现分段错误?,c,pointers,C,Pointers,我正试图使用C中的scanf()函数来阅读该段落。 所以,首先我尝试了下面的代码 #include <stdio.h> int main() { char Input[100]; printf("Please give the paragraph\n"); scanf("%[^EOF]\n",Input ); printf("\n\n%s\n\n",Input); return 1; } 此代码还可以正确地获取输入和打印输出。 但是当程序终止时,它会抛出分段错误。 所以,我需要知道

我正试图使用
C
中的
scanf()
函数来阅读该段落。 所以,首先我尝试了下面的代码

#include <stdio.h>
int main()
{
char Input[100];
printf("Please give the paragraph\n");
scanf("%[^EOF]\n",Input );
printf("\n\n%s\n\n",Input);
return 1;
}
此代码还可以正确地获取输入和打印输出。 但是当程序终止时,它会抛出分段错误。 所以,我需要知道终止时为什么会发生错误

如果指针没有指向任何内存意味着,
printf()
如何打印给定的输入,以及从何处打印


谢谢。

因为
Input
是一个不特定的指针,没有特定的值,所以将其值传递给
scanf
没有意义。首先给它赋值——让它指向某物——然后你可以用它告诉
scanf
在哪里存储东西。

因为
Input
是一个指针,没有特别的值,把它的值传递给
scanf
是没有意义的。首先给它赋值——让它指向某物——然后你可以用它告诉
scanf
在哪里存储东西。

因为指针没有斜体。它包含垃圾,因此您告诉scanf写入垃圾位置。它输出“正确”并不意味着一切都很好。这只是意味着你很幸运……这次。它可以产生错误的结果,也可以随时崩溃。这被称为未定义的行为。问题不在于打印;这是阅读。您不知道数据放在哪里,因为指针指向不确定的空间-您必须分配空间。使用数组时,提供了空间。当您使用未初始化的指针时,您不会这样做。
scanf(“%[^EOF]\n”,Input)
——我建议阅读scanf的文档,而不是猜测,
%[^EOF]
转换可能不会达到您的预期效果,后面的换行符肯定是个坏消息。请问,为什么我投了反对票?因为指针没有斜体。它包含垃圾,因此您告诉scanf写入垃圾位置。它输出“正确”并不意味着一切都很好。这只是意味着你很幸运……这次。它可以产生错误的结果,也可以随时崩溃。这被称为未定义的行为。问题不在于打印;这是阅读。您不知道数据放在哪里,因为指针指向不确定的空间-您必须分配空间。使用数组时,提供了空间。当您使用未初始化的指针时,您不会这样做。
scanf(“%[^EOF]\n”,Input)
——我建议阅读scanf的文档,而不是偶然猜测,
%[^EOF]
转换可能不会达到您预期的效果,后面的换行肯定是个坏消息。我可以知道,我为什么放弃投票吗?
#include <stdio.h>
int main()
{
char *Input;
printf("Please give the paragraph\n");
scanf("%[^EOF]\n",Input );
printf("\n\n%s\n\n",Input);
return 1;
}