说我有以下代码:
char* input;
scanf("%s",&input);
printf("%s\n",input);
给出了分段错误,而
char input[20];
scanf("%s",&input);
printf("%s\n",input);
没有错误。
答案 0 :(得分:2)
char* input;
scanf("%s",&input);
printf("%s\n",input);
让我们一行一行。
input
是char *
。所以我们有足够的空间来指向一个字符的指针,但是然后我们尝试存储那里输入的许多字符。因此,如果输入的字符数多于用于存储指向字符的指针的数字,则会崩溃。
如果要存储字符串,则需要为字符串分配空间,就像在第二个示例中没有给出错误一样。只需将中间行更改为scanf("%s",input);
即可。您希望input
衰减到指向其内容的指针。