Показать сообщение отдельно

  #4  
Старый 07.07.2019, 15:46
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

Цитата:
Сообщение от _Vine_  

+ 1 не нужен, так ты будешь получать указатель на конец строки + 1, а это не только может приводить к неправильному результату функции, но и изменять данные в чужой выделенной памяти и приводить к сбою программы
Цитата:
Сообщение от _Vine_  

И вообще, можно было бы реализовать функцию и без промежуточного буфера temp
В моём случае, строка может быть слеплена с другими символами, и если скопировав её не оградить нулём, strcmp может принять следующий символ за её продолжение, и выдать 1 вместо 0, даже если константа меньшего размера, что с одной стороны и логично, ведь он выдаёт 1, а значит первое больше, но с другой стороны мне этого совершенно не нужно, и хватит сравнения того числа символов, что получено как искомая строка.

Как раз для ограждения и нужен yo, как указатель на конец. У меня не вполне адекватно себя ведёт преобразование памяти ptrTo*, потому вместо инкремента имеющегося адреса я создал указатель. Мб я криворукий, но так хотя бы ошибки доступа мозг не выносят.

temp как раз служит хранилищем для строки, без доп буфера я не нашёл способ оградить байты нулём и сравнить с искомой строкой, ну а без нуля шо - описал выше.

Цитата:
Сообщение от _Vine_  

strstr
Он не ищет дальше первого нуля. В моём случае пришлось бы обрабатывать каждый ноль, а это геморрой, на мой взгляд

[QUOTE="_Vine_"]

Тут должен быть оператор
 
Ответить с цитированием