我必须编写一个有错误的服务器,该服务器由于一个错误而关闭。我的疑问是为什么下面的代码会出现段错误

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字节后停止复制。因此,第一个更有可能导致段错误,但两者都是错误。

08-24 22:35