#include <stdio.h>
#define MAXLENGTH 77
int getline(char[], int);
main() {
char in_line[MAXLENGTH];
int count, in_line_length;
in_line_length = 0;
for (count = 0; count < MAXLENGTH; ++count)
in_line[count] = 0;
in_line_length = getline(in_line, MAXLENGTH);
printf("%s", in_line);
}
int getline(char line[], int max_length) {
int count, character;
character = 0;
for (count = 0; count < (max_length -2) && (character = getchar()) != EOF && character != '\n'; count++) {
line[count] = character;
}
if (character = '\n') {
line[count++] = '\n';
}
line[count] = '\0';
return count;
}
我在上面的代码中遇到了一个特殊问题。作为背景知识,我正在使用 Tiny C 编译器 (TCC) 编译上述 C 代码,并在 Windows XP 命令提示符 (cmd.exe
) 中运行可执行文件。
出现的问题与 EOF
字符有关。运行时,如果我发出 EOF
字符 (CTRL+Z
) 然后按回车键,循环似乎正确退出,但随后 character
填充有换行符 (\n
)。
所以,像这样(作为输入):
test^Ztesttwo
会输出:
test\n
由于 for 循环
之后的 if 语句
总是被执行。我想知道的是,如果它继续从流中抓取另一个字符,为什么循环会在识别到 EOF
字符时成功退出?
最佳答案
你的问题是这一行:
if (character = '\n') {
它是一个赋值而不是测试运算符:
if (character == '\n') {
你可以通过把常量放在左边来防止这样的错误,这样如果你犯了错误,你就会得到一个编译器错误。
if ('\n' = character) {
// ^ wont compile
关于c - 为什么没有正确解释文件结束字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646007/