Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109

Пишем свой strlen

14.03.2022, 00:20. Показов 2845. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, вырвал часть задание из общего задание по написанию своего string.
На данном этапе столкнулся с проблемой (хотел написать свой strlen), но не знаю как реализовать нахождение мусора, могу через таблицу ASCII, но знаю вроде бы что, есть какая-то функция системная. кто подскажет?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int strlensv(const char* a)
    { 
        if (a == nullptr)
        {
            return 0;
        }
 
        int i = 0;
        while (a[i] != '\0') //как найти мусор
        {
            i++;
        }
        return i;
    }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2022, 00:20
Ответы с готовыми решениями:

Пишем свой чекер
Я хочу написать свой чекер, но не знаю с чего начать? Кто знает основные принцип работы чекеров прошу объясните.

пишем свой троян с нуля
Всем привет)))соглашусь, что изобретаю велосипед, но хочется сделать все своими ручками не прибегая к open source и т.п. для повышения...

Пишем свой интерпретатор языка BASIC
Благодаря форуму и Evg в частности интерпретатор развивается, потихоньку превращаясь в простенький интерпретатор QBASIC. Некоторые из...

27
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.03.2022, 07:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Наталья8 Посмотреть сообщение
красиво?
первый символ никогда не проверяется.
если в строке только \0, то может быть выход за пределы выделенной памяти.
Цитата Сообщение от Xpystum Посмотреть сообщение
Я вот про это имел ввиду
от этого не защититься.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
14.03.2022, 08:03
Цитата Сообщение от Наталья8 Посмотреть сообщение
Массивы на куче тоже нультерминируються ?
Массивы никогда и нигде не нультерминируются. Нультерминируются строки.
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
14.03.2022, 11:52
Цитата Сообщение от Xpystum Посмотреть сообщение
C++
1
while (int(a[i]) >= 0 && int(a[i]) <= 255 && a[i] != '\0')
Кхм, чем это может помочь?
Восьмиразрядный char и так имеет диапазон от 0 до 255 или от -128 до 127 (что тоже самое) в зависимости от знаковости.

"Мусорные" символы вы таким образом никак не найдете, потому что понятие "мусорности" логическое, а не физическое. Что именно считается "мусором" - зависит от контекста, от логики исполнения конкретного кода.

Например в Си-строках обычно "мусором" считается то, что идет после нуль-терминатора. Если нуль-терминатора в строке нет, то это уже не Си-строка (нарушено главное логическое условие). Если строка без нуль-терминатора, то критерием "мусорности" символов будет выход за пределы заданной размерности строки. Т.е. рядом с такой строкой всегда должен быть размер, который контролирует ее состояние. Сами по себе байты никакой информации о "мусорности" не несут, одна и та же последовательность байт может быть как "мусором", так и "не-мусором", в зависимости от заданных логических условий.

Надеюсь вы уже поняли, что без контекста говорить о мусоре бессмысленно. Например, если в стандартный strlen передать последовательность символов, которая не является Си-строкой, то просто будет UB. Прямо так в документации и написано:
The behavior is undefined if there is no null character in the character array pointed to by str.
Потому что контекст, в котором соблюдена корректность логического условия "входные данные должны представлять собой Си-строку", утерян.
0
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
14.03.2022, 12:24
Я где то читал, что string тоже нуль терминируеться.
только это большой секрет.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
14.03.2022, 12:29
Цитата Сообщение от Xpystum Посмотреть сообщение
while (a[i] != '\0') //как найти мусор
В переданной си-строке не должно быть "мусора". Всё что до терминирующего символа - не мусор.
0
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
14.03.2022, 13:15
Ну тогда мы всё нашли.

Добавлено через 1 минуту
Это с массивом интов проблемы. или чего подобного.
0
14.03.2022, 14:01

Не по теме:

Цитата Сообщение от Наталья8 Посмотреть сообщение
Это с массивом интов проблемы
Какие еще проблемы ?

0
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
14.03.2022, 17:31
при приёме в функцию указателя на строку, будь она хоть на куче,
смело спрашиваешь strlen.
размер массива интов в функции определить нельзя,
надо передавать переменную с размером.
Ни каких больше проблем...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2022, 17:31

Пишем свой интерпретатор языка BASIC
Добрый день. Я смотрю, тут на форуме была тема коллективного написания интерпретатора BASIC на языке С++. Я очень извиняюсь, но я...

Пишем свой класс, спецификатор доступа protected
Всем привет! Из книги Р. Лафоре относительно спецификатора доступа protected: Далее пишется следующее: Возникает вопросы:...

Пишем свой Хамачи
Доброго времени суток! Я начинающий в C#. Пришла в голову мысль написать аналог хамачи с такими задачами: Сервер - принимает клиента,...

Написать свой strlen
Напишите и протестируйте свою функцию определения длины строки, полностью аналогичную библиотечной strlen.

Пишем свой Keylogger (кейлоггер)
Хочу написать программу которая будет создавать лог-файл, куда будет записывать все нажатие клавиши... И реализовать (если такое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru