考虑下面的程序,当程序执行时会发生什么?
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
main()
{
int fd;
char buf[256];
fd=open("/etc/passwd",O_RDONLY);
if(read(fd,buf,1024)<0)
printf("read fail\n");
printf("strlen%d:\n",strlen(buf));
}
我认为读取系统调用会将 1024 字节从内核缓冲区复制到 buf,结果应该是“strlen:1024”
但是我在 gcc 4.1 中执行它,结果是:
strlen:1024
segment fault
我想知道为什么会有段错误?
至少,如果应该有,为什么不在 read 系统调用中而是在 printf "stelen:1024" 之后立即抛出段错误?
任何帮助将不胜感激。