|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Не нравится, но не пойму, что именно в этой функции(не моей, нашел в чужом коде) не так, когда возможны пробои памяти и т.д. Это такой типа заменитель сравнивалки строк. Подскажите, где стремные места Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:08 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг Хупин, А чем strcmp - не подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:13 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг ХупинПодскажите, где стремные места Снаружи. Из-за отсутствия каких-либо проверок на вменяемость параметров эту функцию легко неправильно вызвать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:15 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
blonduserА чем strcmp - не подходит? strcmp требует две нуль-терминированные строки, чего в данном случае не наблюдается. strncmp облажается если длина строки меньше длины образца. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:26 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovstrcmp требует две нуль-терминированные строки, чего в данном случае не наблюдается. В for - идет сравнение с нулем. Значит они нуль терминированные! strncmp облажается если длина строки меньше длины образца. А если указатели передать неизвестно на что вообще ерунда будет! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:32 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
blonduserВ for - идет сравнение с нулем. Только для subStr. Сама строка задаётся с длиной. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:36 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Тогда расскажите что каждый параметр означает? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:37 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
blonduserТогда расскажите что каждый параметр означает? А самому догадаться сложно? Первый - начальная позиция для поиска. Второй - указатель на блок данных. Третий - длина блока данных. Четвёртый - образец для поиска (вероятнее всего используется литерал). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:43 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovblonduserТогда расскажите что каждый параметр означает? А самому догадаться сложно? Первый - начальная позиция для поиска. Второй - указатель на блок данных. Третий - длина блока данных. Четвёртый - образец для поиска (вероятнее всего используется литерал). Молодец. Призовая игра. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:47 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovblonduserВ for - идет сравнение с нулем. Только для subStr. Сама строка задаётся с длиной. Теоретически с длиной, а практически там может быть, что угодно, я не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:56 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
blonduserМолодец. Призовая игра. Маладец, теперь промоделируй вызов compareSubstring(0, "a", 1, "abc"); Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 14:59 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг ХупинDimitry Sibiryakovпропущено... Только для subStr. Сама строка задаётся с длиной. Теоретически с длиной, а практически там может быть, что угодно, я не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц первых три параметра это то что в С++ называется std::string_view. я бы как минимум добавил проверку на конец строки. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 16:31 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
OoCcРолг Хупинпропущено... Теоретически с длиной, а практически там может быть, что угодно, я не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц первых три параметра это то что в С++ называется std::string_view. я бы как минимум добавил проверку на конец строки. Код: plaintext 1.
да, только там i - параметр, он может быть и за пределами строки Сделал так Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 17:49 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг Хупинда, только там i - параметр, он может быть и за пределами строки Вам виднее. Я разделяю функции по параметрам на два типа. Уровня API и внутренние. В последних параметры должны быть гарантированно правильные. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 18:05 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг ХупинСделал так "Поздравляю, Шарик", ты только что породил бага, приводящего к сегфолту в случаях если данные в буфере не имеют нуля на конце. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 18:20 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг Хупиня не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц Во-первых производительность - эта функция вызывается неоднократно (снаружи есть i++), т.к. надо найти подстроку в строке. Во-вторых строка сама может быть подстрокой в наборе строк с каким-то разделителем, например ';'. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 19:08 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг ХупинСделал так Фигню сделал. Вопрос зачем? Скорее всего тут нездоровое в параметрах: str или subStr указывают на несуществующую память. В итоге сглючивает тут, но проблема выше в месте вызова, как уже подметили 21736387 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 19:17 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovРолг ХупинСделал так "Поздравляю, Шарик", ты только что породил бага, приводящего к сегфолту в случаях если данные в буфере не имеют нуля на конце. да? и чем же стало хуже? Я добавил проверку на 0 и + беру минимум длины строки и переданной длины ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 19:55 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
тут ты только тормоз добавил Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:01 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
И как написал Dimitry Sibiryakov - strlen(str) может вызвать segfault ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:03 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг Хупини чем же стало хуже? Повторяю медленно: твой код упадёт с ошибкой segmentation fault (access violation) на вызове strlen() если у str на конце нет терминирующего нуля. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:05 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovРолг Хупини чем же стало хуже? Повторяю медленно: твой код упадёт с ошибкой segmentation fault (access violation) на вызове strlen() если у str на конце нет терминирующего нуля. Имхуется мне, что по сравнению с исходным вариантом (1-й пост) хуже не стало, разве что , если нет 0 на конце строки, то надо доверять переданной длине.... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:12 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг Хупин... если нет 0 на конце строки, то надо доверять переданной длине.... если нет 0 на конце строки, то твоя прога вылетит на strlen(str) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:16 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг ХупинИмхуется мне, что по сравнению с исходным вариантом (1-й пост) хуже не стало Исходный вариант не приводил к этой ошибке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:18 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг Хупин, еще раз повторю: Скорее всего тут нездоровое в параметрах: str или subStr указывают на несуществующую память. В итоге сглючивает тут, но проблема выше в месте вызова, как уже подметили 21736387 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:25 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovРолг ХупинИмхуется мне, что по сравнению с исходным вариантом (1-й пост) хуже не стало Исходный вариант не приводил к этой ошибке. Вернул, но str[i] != 0 в случае ухода за конец тоже не хорошо Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:26 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovblonduserМолодец. Призовая игра. Маладец, теперь промоделируй вызов compareSubstring(0, "a", 1, "abc"); Совпадёт. Ничему не противоречит. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:53 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг Хупин, Вам важен конец или результат проверки. Чем мой вариант вам не нравится? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 20:58 |
|
Что в функции не так?
|
|||
---|---|---|---|
#18+
Ролг ХупинDimitry Sibiryakovпропущено... Исходный вариант не приводил к этой ошибке. Вернул, но str[i] != 0 в случае ухода за конец тоже не хорошо Код: plaintext 1. 2. 3.
там есть if ((i + 1) > len ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2018, 21:22 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017721]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 275ms |
total: | 411ms |
0 / 0 |