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
为什么这个程序没有完全按照它写的回复?
答案 0 :(得分:5)
memset(word, 0, 255);
导致未定义的行为。您正在访问索引超出单词的范围。另请注意,当您在单词上使用strlen
时,应始终将零终止,因为读取不会这样做。
答案 1 :(得分:1)
您在count = read(in, word, 5);
循环结束时调用了while
。删除了5个字节。这就是"hello"
中的"hello stackoverflow"
和"abcd\n"
中的"abcd\nefgh"
被删除的原因。