这里我遇到了一个奇怪的问题,关于在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”,它像一个字符串。但resule是奇数,下面是交流文件,这个程序的结果, 交流
1234567890abcd
结果
1234567893øþzôo`
看来这串出缓冲器的,我也弄不清发生了什么, 谁能帮我? 谢谢。
甚至是char char [10] = {0};'。 – Hugh
设置为0是好的,但默认为什么编译器没有初始化buf为零?我将代码更改为** static char buf [10] **,然后它有一个正确的输出,我认为** char buf [10] **和** static char buf [10] **具有相同的静态持续时间,并且应该以相同的方式默认初始化 –
ok。我明白了,他们不同,我有一个错误的理解。 'char buf [10]'不会初始化,因为它位于main()块中。谢谢你们。 –