为什么char *给我一个分段错误?

时间:2016-01-23 00:27:43

标签: c

说我有以下代码:

char* input;
scanf("%s",&input);
printf("%s\n",input);

给出了分段错误,而

char input[20];
scanf("%s",&input);
printf("%s\n",input);

没有错误。

1 个答案:

答案 0 :(得分:2)

char* input;
scanf("%s",&input);
printf("%s\n",input);

让我们一行一行。

  1. 好的,inputchar *
  2. 但是我们读了一个字符串。
  3. 所以我们有足够的空间来指向一个字符的指针,但是然后我们尝试存储那里输入的许多字符。因此,如果输入的字符数多于用于存储指向字符的指针的数字,则会崩溃。

    如果要存储字符串,则需要为字符串分配空间,就像在第二个示例中没有给出错误一样。只需将中间行更改为scanf("%s",input);即可。您希望input衰减到指向其内容的指针。