使用指针表示法从C键盘输入输入字符串?

时间:2015-02-10 03:47:35

标签: c string segmentation-fault fgets

我正试图从键盘中取出字符串。当我尝试这个时它没有用。

char *s;
fgets(s,80, stdin);

当我尝试使用上面的代码时,我遇到了分段错误。但是,当我使用下面的代码时,它可以工作,而且我不会遇到分段错误。

char s[81];
fgets(s, 80, stdin);

当我尝试使用指针(char *s)存储字符串时,为什么会出现分段错误?

2 个答案:

答案 0 :(得分:1)

这是因为当你做

char *s;

此时s具有垃圾值,指向无效的地址。取消引用它将导致未定义的行为,在您遇到分段错误的情况下。

您需要先使用malloc分配一些内存。

s = malloc (sizeof (char) * 81);
fgets (s, 80, stdin);

并且,在完成记忆后,请务必记住使用

释放它
free (s);

这将有助于您在较大程序中明显的内存泄漏。

答案 1 :(得分:0)

因为在第一个示例中没有分配任何内存来存储字符串。 在第一个示例中,您有一个本地未初始化的指针(这意味着它有一些垃圾值)。当您调用fgets时,程序会尝试覆盖此指针所指向的内存。因为您尚未分配此空间,所以会出现分段错误。

您的第二个示例char s[81];不会抛出段错误,因为您在堆栈上分配了81个字节,这是fgets将用于覆盖的内容。