Imd*_*dad 0 c malloc fgets segmentation-fault fputs
我尝试了以下代码并得到了一个分段错误 -
int size=30;
char *str;
fputs(fgets(str,size,STDIN),STDOUT);
Run Code Online (Sandbox Code Playgroud)
但当我这样做 -
buff=fgets(str,size,STDIN);
fputs(buff,STDOUT);
Run Code Online (Sandbox Code Playgroud)
它工作得很好.此外,如果我使用malloc for str,第一个代码就会运行.我无法理解这是怎么回事.
你的问题在于:
char *str;
// de-referenece str in ANY way.
Run Code Online (Sandbox Code Playgroud)
你有一个可以指向任何地方的指针.访问任意内存是未定义的行为.
它在一个案例中工作但不在另一个案例中的事实纯属巧合,你应该提供一个适当的缓冲区,如:
char str[100]; // or whatever size you need.
Run Code Online (Sandbox Code Playgroud)
malloc正如您已经发现的那样,或者使用动态分配内存.
一旦你进入了未定义行为的阴暗世界,所有赌注都将被取消.
它可能会崩溃,它可能会起作用,它可能导致飞猪或鼻子恶魔或当地时空区域的崩溃变成一个奇点.底线,不要这样做:-)