有人可以向我解释为什么以下测试程序会打印:
abcde
fghie
jklie
m
谎言
m
谎言
代替:
abcde
fghie
jklie
mklie
mklie
程序为:
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
char buffer[16];
void main()
{
int fd=open("bb",O_RDONLY);
int i;
for(i=5;i>0;i--)
{
read(fd,buffer,i);
printf("%s\n",buffer);
}
}
文件bb包含以下序列:abcdefghijklm
答案 0 :(得分:3)
buffer
包含“ abcde \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0”和fd
点在“ f”处buffer
包含“ fghie \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0”和fd
点在“ j”处buffer
包含“ jklie \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0”和fd
点位于'm'buffer
包含“ m \ nlie \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0”和{{ 1}}位于文件末尾fd
中没有任何变化请注意,代码依赖于全局变量buffer
被初始化为零。