ubuntu gcc中的分段错误

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),则不会发生错误.

hmj*_*mjd 7

gets()取消引用一个单元化指针,导致未定义的行为.

为内存分配ch和不使用,gets()因为没有办法限制读取的字符数,这意味着可能超出目标数组的范围.

示例使用fgets():

char ch[128];
if (fgets(ch, 128, stdin))
{
}
Run Code Online (Sandbox Code Playgroud)