Два сценария strcmp

0

Я должен написать багги-сервер, который будет сбой из-за одной ошибки. Мое сомнение в том, почему приведенный ниже код дает ошибку 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
  • 0
    Первый компилируется? Редактировать: Нет .
  • 1
    «12345» нужно 6 символов (не забудьте последний «нулевой» / терминатор, '\0' ); во втором случае BUFSIZE это ...? и если оно больше 5, и среди первых 5 байтов не появляется '\0' , тогда strcpy будет переполнен.
Показать ещё 5 комментариев
Теги:
string

2 ответа

1

Первая копирует из строки с нулевым завершением (абафф) в другую строку. Таким образом, он отходит от конца абака до тех пор, пока не найдет нулевой байт, который может быть довольно пустым и вызывает segfault. Другая копирует из строки с корректным завершением (buf) в нижнюю строку wbuf и останавливает копирование после того, как она копирует байты strlen (buf) +1. Таким образом, первое, скорее всего, вызовет segfault, но оба являются ошибками.

0

Превышение размера массива - неопределенное поведение. Что-то может случиться. Если теперь у вас нет SIGSEGV, вы можете получить его позже при запуске программы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню