【发布时间】:2020-03-15 02:02:43
【问题描述】:
我正在制作一个程序,打印出用户输入的内容,需要用read_line()的方法完成(我的功课),所以我不能改变太多。
我不明白为什么它没有打印出用户输入的内容。
#include <stdlib.h>
char *read_line(char *buf, size_t sz) {
char tempBuf[sz];
char c;
int pos = 0;
printf("> ");
while(1) {
c = getchar();
if (tempBuf[pos] == EOF || tempBuf[pos] == '\n') {
buf = tempBuf;
return buf;
} else {
tempBuf[pos] = c;
}
pos++;
}
}
int main(int argc, char **argv) {
char *buf;
char *input = read_line(buf, 128);
printf("Here: %s", input);
}
我是 C 的新手,我发现它很混乱,所以请用非常简单的术语解释一下。任何帮助将不胜感激。
【问题讨论】:
-
尝试使用诊断标志编译代码:
gcc -Wall -Wextra -Wpedantic yourfile.c并尝试一一解决错误/警告。 -
您的
read_line功能已损坏。您必须将getchar()的返回值与EOF进行比较。但是tempBuf只包含getchar在转换为char之后的返回值,从而失去了与EOF 比较所需的精度。让我非常担心的是,您会收到一个作业,其中包括您可能无法更改的代码,这些代码是由不了解如何正确使用getchar的人编写的。