管道未清理 - 我每次都读相同的第一个字符
问题描述:
我正在从子进程读取管道,如下所示。问题是,虽然fgetc正在工作,但并没有开始新的一行。它不断阅读,所以我的程序总是在'!管道未清理 - 我每次都读相同的第一个字符
例如:
! - >!example - >!示例示例
而不是
! - >示例 - >示例
以下是我的读取函数,但读取时管道基本不清除。
char* read_line(FILE* file) {
char* result = malloc(sizeof(char) * 80);
int position = 0;
int next = 0;
while (1) {
next = fgetc(file);
if (next == '!') {
return "!";
}
if (next == EOF || next == '\n') {
result[position] = '\0';
return result;
} else {
result[position++] = (char)next;
}
}
}
答
由于对访问结果[位置]没有限制,可能会发生崩溃。 memset不是在malloc之后完成的。忽略所有这些问题似乎在调用read_line的函数中。检查返回地址的处理,返回“!”是不正确的。
btw铸造'(char)next'无用 –
返回一个指向字符串的指针或指向分配的内存的指针可以确保内存泄漏(或未定义的行为被执行)。 – EOF
无论如何,这里需要[mcve]。最低限度地证明你正在** ** read_line。此外,子进程中的发送例程也很有用。 –