我希望这个问题能解释我的问题。如果解释“有效”的解决方法,我也将不胜感激。
读取文件的传统方式(我知道)
int fd;
char buffer[MAX];
while(read(fd,buffer,MAX)>0)
{
buffer[MAX]='\0';
write(sockfd,buffer,MAX);
memset(buffer,NULL,MAX);
}
导致溢出。以某种方式意外起作用的解决方法是
while((read(fd,buffer,MAX)!=0)||(read(fd,buffer,MAX)!= -1))
{
buffer[MAX]='\0';
write(sockfd,buffer,MAX);
memset(buffer,NULL,MAX);
}
^^ 这段代码打印出整个文件,没有跳过可观察到的。
像
do
{
int temp;
temp=read(fd,buffer,MAX);
if((temp == 0) || (temp == -1))
{
break;
}
buffer[MAX]='\0';
write(sockfd,buffer,MAX);
memset(buffer,NULL,MAX);
}while(1);
也造成了堆栈溢出。我在这里错过了一些非常重要的东西吗?
谢谢