为什么这段代码编译但没有运行

时间:2017-04-03 12:50:13

标签: c pointers puts

为什么这段代码编译但没有运行?

int main() {
     char *s;

     scanf("%15s", s);
     puts(s);
 } 

3 个答案:

答案 0 :(得分:2)

因为s是未初始化的指针,所以你不能在那里存储数据(因为“那里没有”)。

尝试:

char s[32];
相反,它为scanf()可以写出32个字符的空间。

答案 1 :(得分:2)

你需要为scanf(...)提供内存char *s只是指向某些内存的指针,但不是内存本身。您可以malloc(...)内存并让s指向它,或者通过char s[16]

在堆栈中本地分配它

答案 2 :(得分:1)

对于初学者,请为scanf电话提供适当的缓冲区。例如,尝试使用char *s而不是仅仅是未初始化指针的char s[128]