我必须编写一个有错误的服务器,该服务器由于一个错误而关闭。我的疑问是为什么下面的代码会出现段错误
char wbuff[5];
char abuff[5]= "12345";
strcpy(wbuff,abuff);
但是下面的代码没有
char buf[BUFSIZE];
char wbuf[5];
n = read(connfd, buf, BUFSIZE); // read input string from client
strcpy(wbuf,buf); // strlen(buf) is greater than 5
最佳答案
第一个从非空终止字符串(abuff)复制到另一个字符串。因此,它会从abuff末尾走走,直到找到零字节为止,这可能是一个相当不错的方法,并导致了段错误。另一个从正确终止的字符串(buf)复制到较小的字符串wbuf,并在复制strlen(buf)+1字节后停止复制。因此,第一个更有可能导致段错误,但两者都是错误。