Shu*_*ari -5 c pointers gets segmentation-fault
#include<stdio.h>
int main()
{
char *str;
gets(str);
puts(str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
output =分段错误
为什么它会给出分段错误?
"指针如何分配内存"这个问题的答案很简单:它们没有.这就是您遇到分段错误的原因:从未初始化的指针访问数据是未定义的行为.
程序员必须分配内存,并将其分配给指针.例如,您可以使用malloc:
char *str = malloc(10);
fgets(str, 10, stdin);
puts(str);
Run Code Online (Sandbox Code Playgroud)
关于上述修复的一个重要注意事项fgets是使用而不是弃用gets.这是因为fgets让你告诉函数它可以在缓冲区中使用多少内存,同时gets假设它拥有它想要的所有内存,导致缓冲区溢出.