【发布时间】:2018-04-01 06:44:04
【问题描述】:
我正在制作非常基本的程序来检查 fputs 和 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;
}
“很好”是指程序等待输入,然后打印该输入(最多 2 位数字 - 因为我假设最后一个是 '\0' -)所以没关系。 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 不等待标准输入。我什至根本没有使用 char* a 所以我看不出这个初始化怎么会导致任何问题。谁能解释一下?欢迎对提交的代码提出任何其他更正/建议!
【问题讨论】:
-
两种代码的行为都是未定义的行为。
char* word;-->char* word = malloc(3);
标签: c string pointers memory-management io