我正在制作非常基本的程序来检查fput和fgets是如何工作的,并且发生了一些奇怪的事情。以下代码工作正常:
#include <stdio.h>
#include <stdlib.h>
int main () {
char* word;
char* a;
int k = 3;
fgets(word, k, stdin);
fputs(word, stdout);
free(word);
return 0;
}
by&#34; fine&#34;我的意思是程序等待输入,然后打印输入(最多2位数 - 因为最后一个是&#39; \ 0&#39;我假设 - )所以这没关系。我知道char * a是未使用的。
我觉得奇怪的是,当我初始化char * a = NULL时,新代码是:
#include <stdio.h>
#include <stdlib.h>
int main () {
char* word;
char* a = NULL;
int k = 3;
fgets(word, k, stdin);
fputs(word, stdout);
free(word);
return 0;
}
现在fgets不等待stdin输入。我甚至没有使用char * a,所以我不知道这个初始化怎么会导致任何问题。有谁能解释一下?欢迎对提交的代码提出任何其他更正/建议!
答案 0 :(得分:3)
在这两种情况下,您的代码都会调用 Undefined Behavior ,因为您试图将输入存储在不指向任何内存块的指针中!这解释了你观察到的不一致。
改变这个:
char* word;
到此:
char* word = malloc(sizeof(char) * 3);
或者,更好的是,使用一个数组:char word[k];
,或者使用一个常数(可能更大的线长度 - 我建议4096
,部分是为了减震,但主要是因为它不会造成麻烦并且会避免麻烦)。