Я должен написать багги-сервер, который будет сбой из-за одной ошибки. Мое сомнение в том, почему приведенный ниже код дает ошибку segmenation
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
Первая копирует из строки с нулевым завершением (абафф) в другую строку. Таким образом, он отходит от конца абака до тех пор, пока не найдет нулевой байт, который может быть довольно пустым и вызывает segfault. Другая копирует из строки с корректным завершением (buf) в нижнюю строку wbuf и останавливает копирование после того, как она копирует байты strlen (buf) +1. Таким образом, первое, скорее всего, вызовет segfault, но оба являются ошибками.
Превышение размера массива - неопределенное поведение. Что-то может случиться. Если теперь у вас нет SIGSEGV, вы можете получить его позже при запуске программы.
'\0'
); во втором случае BUFSIZE это ...? и если оно больше 5, и среди первых 5 байтов не появляется'\0'
, тогда strcpy будет переполнен.