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

Пишем свой strlen

14.03.2022, 00:20. Показов 2949. Ответов 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
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
14.03.2022, 08:03
Цитата Сообщение от Наталья8 Посмотреть сообщение
Массивы на куче тоже нультерминируються ?
Массивы никогда и нигде не нультерминируются. Нультерминируются строки.
1
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,371
14.03.2022, 12:24
Я где то читал, что string тоже нуль терминируеться.
только это большой секрет.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
14.03.2022, 12:29
Цитата Сообщение от Xpystum Посмотреть сообщение
while (a[i] != '\0') //как найти мусор
В переданной си-строке не должно быть "мусора". Всё что до терминирующего символа - не мусор.
0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,371
14.03.2022, 13:15
Ну тогда мы всё нашли.

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

Не по теме:

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

0
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,371
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
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru