Memcmp и Seg Fault

Задаю нулевые строки и выполняю memcmp:

char *str1 = NULL;
char *str2 = NULL;
memcmp(str1, str2, 2);

Почему, если число будет нечётным, то он выдаст сегу (ну что по идее всегда и должно быть). А если чётное, то сеги нет??... По идее должно же работать либо всегда с сегой, если в функции нет проверки на NULL, либо всегда без сеги, если она есть.

Но почему вот так?


Ответы (1 шт):

Автор решения: Harry

Нулевая строка — это "", а NULL — это нулевой указатель :).

Что до UB... Понимаете, вы можете перебегать дорогу на красный свет светофора. Можете переходить ее с завязанными глазами и заткнутыми ушами. И у вас это будет отлично получаться... до поры до времени. А у кого-то будет десять метров размазанного по асфальту мяса сразу.

Вот из описания данной функции: If the objects overlap, the behavior is undefined.
If either dest or src is an invalid or null pointer, the behavior is undefined, even if count is zero.
.
Вопрос на этом закрыт?

→ Ссылка