Memcmp и Seg Fault
Задаю нулевые строки и выполняю memcmp:
char *str1 = NULL;
char *str2 = NULL;
memcmp(str1, str2, 2);
Почему, если число будет нечётным, то он выдаст сегу (ну что по идее всегда и должно быть). А если чётное, то сеги нет??... По идее должно же работать либо всегда с сегой, если в функции нет проверки на NULL, либо всегда без сеги, если она есть.
Но почему вот так?
Ответы (1 шт):
Нулевая строка — это "", а 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..
Вопрос на этом закрыт?