2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109
|
||||||
1 | ||||||
Пишем свой strlen14.03.2022, 00:20. Показов 1802. Ответов 27
Метки нет Все метки)
(
Всем привет, вырвал часть задание из общего задание по написанию своего string.
На данном этапе столкнулся с проблемой (хотел написать свой strlen), но не знаю как реализовать нахождение мусора, могу через таблицу ASCII, но знаю вроде бы что, есть какая-то функция системная. кто подскажет?
0
|
14.03.2022, 00:20 | |
Ответы с готовыми решениями:
27
Пишем свой чекер пишем свой троян с нуля
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|
14.03.2022, 00:48 | 2 |
Открой мусорное ведро иль спроси у бомжа, на крайняк.
Добавлено через 57 секунд поздравляю, вот у тебя уже есть кусок мусора, даже искать не нужно.
0
|
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109
|
|
14.03.2022, 00:54 [ТС] | 3 |
Спасибо за конструктивный ответ, может кто ещё подсказать без остроумных ответов?
про мусор я имел ввиду мусорные символы:
0
|
![]() 474 / 340 / 64
Регистрация: 09.03.2016
Сообщений: 3,359
|
|
14.03.2022, 00:59 | 4 |
Некоторые нультерминатор ищут.
Я не решаюсь. Всё равно обсерут.
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|
14.03.2022, 01:04 | 5 |
Если у тебя С-строка, признаком конца строки является символ '\0', его числовой код равен 0.
Если у тебя свой класс строки, стоит хранить размер строки отдельно, как это делает std::string. По причинам написанных выше, мне не понятен ни вырванный Добавлено через 46 секунд Если работать с С-строками, по другому никак. Добавлено через 3 минуты Xpystum, ну а к чему я хотел вас подтолкнуть, это к тому, что никакого "мусора" в ОЗУ нету. Исходя из этого утверждения, должны были подумать, а что же есть ? Но видимо вам все равно, что и как там есть. Вам же нужно мусор найти...
0
|
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109
|
||||||
14.03.2022, 01:05 [ТС] | 6 | |||||
я же написал что я в стринге пишу свой стрлён и мне его надо до ума довести что бы работать дальше с ним. я не хочу использовать готовую функцию strlen();
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|
14.03.2022, 01:11 | 7 |
не учитывать,
Но зачем, у вас уже есть переменная для длинны строки. Когда какой то метод изменяет ее, просто изменяете переменную LEN.
0
|
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109
|
|||||||||||
14.03.2022, 01:13 [ТС] | 8 | ||||||||||
Может когда-нибудь кому-нибудь понадобится решилось это условиям (int(a[i]) >= 0 && int(a[i]) <= 255 && a[i] != '\0')
Я понимаю что у меня есть LEN и формально мне с ним надо работать, но такие требования у меня что бы не использовать функцию strlen в конструкторе, мне сказали написать свою функцию и с ней работать...
0
|
![]() 474 / 340 / 64
Регистрация: 09.03.2016
Сообщений: 3,359
|
||||||
14.03.2022, 01:18 | 9 | |||||
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
||||||
14.03.2022, 01:24 | 10 | |||||
Ну вот, уже похоже на нормальную формулировку текущей задачи и нормальный вопрос.
0
|
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109
|
|
14.03.2022, 01:31 [ТС] | 11 |
Я вот про это имел ввиду, что бы обезопаситься, получается у нас там не инициализированная переменная передаётся, и strlen наш все равно будет высчитывать количество этого мусора пока не найдёт случайно где-то этот злощасный '\0'
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|
14.03.2022, 01:32 | 12 |
0
|
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109
|
|
14.03.2022, 01:34 [ТС] | 13 |
А Бывает ещё такое что у нас, что у нас в переменной идёт например наши символы "Иван№%2в" - это пример) я поэтому и спрашивал как учитывать этот мусор) ну точнее сказать не учитывать)))
Добавлено через 1 минуту Я понимаю, но разные люди будут работать с моим классом например - я хочу сделать так что бы не было косяков со стороны человека который будет работать с мои классом ну или хотя бы в будущем быстро нашёл ошибку - нежели он сидел и думал. я на это ориентируюсь)
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
|||||||||||
14.03.2022, 01:46 | 14 | ||||||||||
Это программирование, ну другой стороне. вашим классом тоже программист сидит.
От дурака на самом деле никак не защититься. Можно уменьшить так или иначе небезопасных ситуаций , но исключить - никак. К тому же это все утяжеляет код и итоговую программу. Единственный выход : отказаться от поддержки Си-строк; А в качестве инициализатора, принимать только автоматические массивы и свои стринги. Самому делать ввод из внешних источников. Замуроваться насмерть и повесится там )))
Смысл понятен ? Добавлено через 3 минуты или
Тут UB, неопределенное поведение.
0
|
![]() 474 / 340 / 64
Регистрация: 09.03.2016
Сообщений: 3,359
|
|
14.03.2022, 01:46 | 15 |
Массивы на куче тоже нультерминируються ?
0
|
![]() 3765 / 2693 / 762
Регистрация: 29.06.2020
Сообщений: 9,917
|
||||||
14.03.2022, 01:54 | 16 | |||||
![]() Решение
Вы можете это гарантировать, только внутри своего класса, после того как он корректно инициализирован.
Корректность инициализации, зависит от вызывающего кода, в случае передачи С-строки. А с вашей стороны. все будет выглядеть корректно в любом случае. Добавлено через 1 минуту их начальные адреса и размеры, сохраняются , и удаляются при освобождении этих самых массивов. Добавлено через 4 минуты Xpystum, Можете вынудить вызывающий код , позаботиться о том , что бы указать. сколько символов из С-строки взять конструктором при инициализации, тогда вы явно укажете, что вызывающий код просто ОБЯЗАН об этом побеспокоится
![]()
0
|
![]() 474 / 340 / 64
Регистрация: 09.03.2016
Сообщений: 3,359
|
||||||
14.03.2022, 02:32 | 17 | |||||
std::string нуль терминируем...
line.c_str()[++i] красиво? Добавлено через 2 минуты Нашёл нуль терминатор.
0
|
14.03.2022, 02:36 | 18 |
0
|
фрилансер
![]() 6326 / 5447 / 1108
Регистрация: 11.10.2019
Сообщений: 14,504
|
|
14.03.2022, 06:40 | 19 |
Наталья8, std::string гарантирует ноль на конце своей строки всегда
0
|
Вездепух
![]() ![]() ![]() 12847 / 6714 / 1805
Регистрация: 18.10.2014
Сообщений: 17,009
|
|
14.03.2022, 07:03 | 20 |
0
|
14.03.2022, 07:03 | |
Помогаю со студенческими работами здесь
20
Пишем свой интерпретатор языка BASIC Пишем свой класс, спецификатор доступа protected Пишем свой Хамачи Написать свой strlen Пишем свой Keylogger (кейлоггер) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
|
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
|
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
|
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
|
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
|
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
|
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
|
Разработка кроссплатформенного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
|
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
|
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
|