为什么write()不能正常工作?

时间:2013-03-18 16:02:36

标签: c

int main() {
    int in = STDIN_FILENO;
    int out = STDOUT_FILENO;
    char word[100];
    int count;

    while ((count = read(in, word, 100)) != 0) {
        write(out, word, strlen(word));
        memset(word, 0, 255);
        count = read(in, word, 5);
    }
}

在控制台中我得到了

hello world
hello world
hello stackoverflow
 stackoverflow
abcd
efgh
efgh

为什么这个程序没有完全按照它写的回复?

2 个答案:

答案 0 :(得分:5)

memset(word, 0, 255);导致未定义的行为。您正在访问索引超出单词的范围。另请注意,当您在单词上使用strlen时,应始终将零终止,因为读取不会这样做。

答案 1 :(得分:1)

您在count = read(in, word, 5);循环结束时调用了while。删除了5个字节。这就是"hello"中的"hello stackoverflow""abcd\n"中的"abcd\nefgh"被删除的原因。