Scr*_*ock 0 c pointers memory-management
#include<stdio.h>
int main()
{
char *ch;
int n=10;
gets(ch);
puts(ch);
printf("%d\n",n);
}
#include<stdio.h>
int main()
{
char *ch;
int n=10;
gets(ch);
printf("%d\n",n);
puts(ch);
}
Run Code Online (Sandbox Code Playgroud)
在第一个中,分割错误发生在print(n)处,而第二个分支错误发生在puts(ch)处.如果在声明n之后也使用print(n),则不会发生错误.
gets()取消引用一个单元化指针,导致未定义的行为.
为内存分配ch和不使用,gets()因为没有办法限制读取的字符数,这意味着可能超出目标数组的范围.
示例使用fgets():
char ch[128];
if (fgets(ch, 128, stdin))
{
}
Run Code Online (Sandbox Code Playgroud)