C语言题目：char *s; scanf("%s", s);为什么错误？
因为`scanf("%s",s);`只传入了指针变量`s`的值，`scanf`函数会直接把数据写到`s`指向的内存空间之内。而`s`没有初始化，其指向的空间不能确定。所以在运行时如果写到了禁止访问的内存空间就会引发异常。

可以使用以下方法实现字符串输入：

            char *s;    scanf ("%ms", &s);

这里格式控制字符串里的`m`表示根据输入的字符串大小为输入的字符串分配足够的空间，并使指定的指针指向这块存储空间的首地址（换句话说，使用`m`时`scanf`函数并不会直接把数据写到`s`指向的内存空间之内，而是会先在内存中分配存储空间存放输入的字符串，再让`s`指向这块存储空间）。由于要通过函数调用改变指针指向，对应的实参类型为`char**`。 这种在输入时分配存储空间的方式属于动态存储分配，在字符串使用完毕后要通过`free`函数释放字符串占用的存储空间。