我正在编写一个程序,它必须从文件中读取一个单词,该单词由' '
或\n
与其他单词分开(我决定使用'read'
系统函数并且面临一个问题。
特别是,由于它是用手册编写的,'read'
必须返回0
,而没有其他内容可供阅读(到达EOF
),但在我的情况下,它会返回{{ 1}}(我检查了返回符号的\n
代码及ASCII
10
\n
并检查了我的程序多次,它总是返回相同的代码) 。这是代码
char *read_word_from_file(int fd, int *flag)
{
int i = 0;
char ch, *buf = NULL;
if (!read(fd, &ch, 1)) { //file is empty
*flag = 1;
return NULL;
}
while (ch != ' ' && ch != '\n') {
if (!(buf = (char *) realloc(buf, i + 1))) goto mem_err;
buf[i++] = ch;
if (!(read(fd, &ch, 1))) {
*flag = 1;
break;
}
}
buf[i] = '\0';
return buf;
mem_err:
perror("realloc");
exit(1);
}
(flag
变量用于表示外部函数的EOF
,它调用了这个函数。所以,我的问题是"这样的行为是正常的,还是我弄错了某处"
P.S. - Off-topic question, how do you make a part of text(a single word) shadowed like a code samples?
答案 0 :(得分:1)
gedit根本不会在文件中显示换行符。为什么文件中有换行符?取决于您如何创建该文件。如果您使用了例如puts("M");
,那么您应该了解puts()会添加换行符。如果您使用编辑器创建它,您应该理解编辑器通常编写以换行符结尾的完整行。
- 延