【发布时间】:2011-07-18 11:26:20
【问题描述】:
这里我遇到了一个关于 linux 中 c 读取函数的奇怪问题。
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char** argv){
int fd=open("a.c",O_RDONLY);
if(fd==-1){
fprintf(stderr,"%s\n",strerror(errno));
}
char buf[10];
if(read(fd,buf,9)==-1){
fprintf(stderr,"%s\n",strerror(errno));
}else{
printf("%s\n",buf);
}
}
我认为 buf 应该初始化为零,所以前 9 个字符读取到缓冲区,最后一个是 '\0',它就像一个字符串。但结果很奇怪,下面是 a.c 文件和这个程序的结果, 交流
1234567890abcd
结果
1234567893øþzôo`
似乎这个字符串超出了缓冲区,我不知道发生了什么,谁能帮助我? 谢谢。
【问题讨论】: