我必须编写一个有缺陷的服务器,它会因一个错误而崩溃。 我的疑问是为什么下面的代码会出现段错误
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 个字节后停止复制。所以第一个更有可能导致段错误,但两者都是错误。
关于c++ - strcmp的两种场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491231/