我必须编写一个错误的服务器,由于一个错误而崩溃。 我怀疑下面的代码会出现分段错误
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
答案 0 :(得分:1)
第一个从非空终止字符串(abuff)复制到另一个字符串。所以它走到了abuff结束,直到它找到一个零字节,这可能是一种方式,并导致段错误。另一个从正确终止的字符串(buf)复制到尺寸不足的字符串wbuf,并在复制strlen(buf)+1个字节后停止复制。所以第一个更有可能导致段错误,但两者都是错误。
答案 1 :(得分:0)
超出数组的大小是未定义的行为。有些事情可能发生。如果您现在没有SIGSEGV,可以稍后在程序运行中获取它。