|
|
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Не нравится, но не пойму, что именно в этой функции(не моей, нашел в чужом коде) не так, когда возможны пробои памяти и т.д. Это такой типа заменитель сравнивалки строк. Подскажите, где стремные места Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:08:15 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг Хупин, А чем strcmp - не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:13:27 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг ХупинПодскажите, где стремные места Снаружи. Из-за отсутствия каких-либо проверок на вменяемость параметров эту функцию легко неправильно вызвать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:15:16 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
blonduserА чем strcmp - не подходит? strcmp требует две нуль-терминированные строки, чего в данном случае не наблюдается. strncmp облажается если длина строки меньше длины образца. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:26:35 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovstrcmp требует две нуль-терминированные строки, чего в данном случае не наблюдается. В for - идет сравнение с нулем. Значит они нуль терминированные! strncmp облажается если длина строки меньше длины образца. А если указатели передать неизвестно на что вообще ерунда будет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:32:30 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
blonduserВ for - идет сравнение с нулем. Только для subStr. Сама строка задаётся с длиной. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:36:29 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Тогда расскажите что каждый параметр означает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:37:20 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
blonduserТогда расскажите что каждый параметр означает? А самому догадаться сложно? Первый - начальная позиция для поиска. Второй - указатель на блок данных. Третий - длина блока данных. Четвёртый - образец для поиска (вероятнее всего используется литерал). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:43:35 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovblonduserТогда расскажите что каждый параметр означает? А самому догадаться сложно? Первый - начальная позиция для поиска. Второй - указатель на блок данных. Третий - длина блока данных. Четвёртый - образец для поиска (вероятнее всего используется литерал). Молодец. Призовая игра. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:47:52 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovblonduserВ for - идет сравнение с нулем. Только для subStr. Сама строка задаётся с длиной. Теоретически с длиной, а практически там может быть, что угодно, я не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:56:46 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
blonduserМолодец. Призовая игра. Маладец, теперь промоделируй вызов compareSubstring(0, "a", 1, "abc"); Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 14:59:55 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг ХупинDimitry Sibiryakovпропущено... Только для subStr. Сама строка задаётся с длиной. Теоретически с длиной, а практически там может быть, что угодно, я не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц первых три параметра это то что в С++ называется std::string_view. я бы как минимум добавил проверку на конец строки. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 16:31:24 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
OoCcРолг Хупинпропущено... Теоретически с длиной, а практически там может быть, что угодно, я не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц первых три параметра это то что в С++ называется std::string_view. я бы как минимум добавил проверку на конец строки. Код: plaintext 1. да, только там i - параметр, он может быть и за пределами строки Сделал так Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 17:49:39 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг Хупинда, только там i - параметр, он может быть и за пределами строки Вам виднее. Я разделяю функции по параметрам на два типа. Уровня API и внутренние. В последних параметры должны быть гарантированно правильные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 18:05:48 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг ХупинСделал так "Поздравляю, Шарик", ты только что породил бага, приводящего к сегфолту в случаях если данные в буфере не имеют нуля на конце. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 18:20:50 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг Хупиня не пойму этот идиотизм, зачем передавать длину параметром, вместо того, чтобы брать ее внутри функцц Во-первых производительность - эта функция вызывается неоднократно (снаружи есть i++), т.к. надо найти подстроку в строке. Во-вторых строка сама может быть подстрокой в наборе строк с каким-то разделителем, например ';'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 19:08:53 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг ХупинСделал так Фигню сделал. Вопрос зачем? Скорее всего тут нездоровое в параметрах: str или subStr указывают на несуществующую память. В итоге сглючивает тут, но проблема выше в месте вызова, как уже подметили 21736387 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 19:17:00 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovРолг ХупинСделал так "Поздравляю, Шарик", ты только что породил бага, приводящего к сегфолту в случаях если данные в буфере не имеют нуля на конце. да? и чем же стало хуже? Я добавил проверку на 0 и + беру минимум длины строки и переданной длины ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 19:55:58 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
тут ты только тормоз добавил Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:01:38 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
И как написал Dimitry Sibiryakov - strlen(str) может вызвать segfault ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:03:56 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг Хупини чем же стало хуже? Повторяю медленно: твой код упадёт с ошибкой segmentation fault (access violation) на вызове strlen() если у str на конце нет терминирующего нуля. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:05:11 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovРолг Хупини чем же стало хуже? Повторяю медленно: твой код упадёт с ошибкой segmentation fault (access violation) на вызове strlen() если у str на конце нет терминирующего нуля. Имхуется мне, что по сравнению с исходным вариантом (1-й пост) хуже не стало, разве что , если нет 0 на конце строки, то надо доверять переданной длине.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:12:32 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг Хупин... если нет 0 на конце строки, то надо доверять переданной длине.... если нет 0 на конце строки, то твоя прога вылетит на strlen(str) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:16:27 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг ХупинИмхуется мне, что по сравнению с исходным вариантом (1-й пост) хуже не стало Исходный вариант не приводил к этой ошибке. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:18:38 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг Хупин, еще раз повторю: Скорее всего тут нездоровое в параметрах: str или subStr указывают на несуществующую память. В итоге сглючивает тут, но проблема выше в месте вызова, как уже подметили 21736387 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:25:02 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovРолг ХупинИмхуется мне, что по сравнению с исходным вариантом (1-й пост) хуже не стало Исходный вариант не приводил к этой ошибке. Вернул, но str[i] != 0 в случае ухода за конец тоже не хорошо Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:26:36 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovblonduserМолодец. Призовая игра. Маладец, теперь промоделируй вызов compareSubstring(0, "a", 1, "abc"); Совпадёт. Ничему не противоречит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:53:54 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг Хупин, Вам важен конец или результат проверки. Чем мой вариант вам не нравится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 20:58:32 |
|
||
|
Что в функции не так?
|
|||
|---|---|---|---|
|
#18+
Ролг ХупинDimitry Sibiryakovпропущено... Исходный вариант не приводил к этой ошибке. Вернул, но str[i] != 0 в случае ухода за конец тоже не хорошо Код: plaintext 1. 2. 3. там есть if ((i + 1) > len ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2018, 21:22:18 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2017721]: |
0ms |
get settings: |
12ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
52ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 335ms |
| total: | 539ms |

| 0 / 0 |
