指针如何分配内存

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 =分段错误

为什么它会给出分段错误?

das*_*ght 7

"指针如何分配内存"这个问题的答案很简单:它们没有.这就是您遇到分段错误的原因:从未初始化的指针访问数据是未定义的行为.

程序员必须分配内存,并将其分配给指针.例如,您可以使用malloc:

char *str = malloc(10);
fgets(str, 10, stdin);
puts(str);
Run Code Online (Sandbox Code Playgroud)

关于上述修复的一个重要注意事项fgets是使用而不是弃用gets.这是因为fgets让你告诉函数它可以在缓冲区中使用多少内存,同时gets假设它拥有它想要的所有内存,导致缓冲区溢出.