9 / 9 / 1
Регистрация: 09.07.2009
Сообщений: 648
|
||||||
1 | ||||||
Длина строки (sizeof и strlen)31.07.2023, 18:08. Показов 1760. Ответов 8
Метки нет Все метки)
(
В программе
0
|
31.07.2023, 18:08 | |
Ответы с готовыми решениями:
8
Длина строки в байтах strlen
|
Вездепух
![]() ![]() ![]() 12866 / 6731 / 1809
Регистрация: 18.10.2014
Сообщений: 17,036
|
|
31.07.2023, 18:24 | 2 |
![]() Решение
Это язык С?
sizeof не имеет никакого отношения к длине строки и ничего не знает ни о каких строках вообще. sizeof в данном примере возвращает размер массива. А уж как у вас размер массива коррелирует с длиной строки - это дело десятое. Да, у вас в вашем примере размер массива получается на 1 больше длины строки из-за терминального нуля.И какой strlen ? Для использования strlen нужно #include <cstring> . Я не вижу #include <cstring> у вас в коде.
1
|
9 / 9 / 1
Регистрация: 09.07.2009
Сообщений: 648
|
|
31.07.2023, 18:32 [ТС] | 3 |
Спасибо за ответ. Я теперь понял, что sizeof работает со строкой как с массивом и видимо считает конец строки как элемент массива. Переделывал из проекта C++, забыл убрать. Нужного заголовочного файла у меня действительно нет, но программа работает и strlen считает. Почему считает - не знаю (проверил еще раз только что - работает)
0
|
Вездепух
![]() ![]() ![]() 12866 / 6731 / 1809
Регистрация: 18.10.2014
Сообщений: 17,036
|
|
31.07.2023, 20:08 | 4 |
Ну, еще раз:
sizeof не знает, что такое "строка". sizeof не может "считать" конец строки ничем, ибо sizeof ничего не знает ни о каких "концах строк". sizeof возвращает размер объекта в байтах. После объявления char a[100] = "abc"; sizeof a вернет 100, несмотря на то, что длина строки равна 3. Не 3, не 4, а 100.
0
|
9 / 9 / 1
Регистрация: 09.07.2009
Сообщений: 648
|
|
01.08.2023, 09:50 [ТС] | 5 |
Теперь понятно.
0
|
![]() 4047 / 2598 / 431
Регистрация: 09.09.2017
Сообщений: 11,565
|
||||||
01.08.2023, 11:01 | 6 | |||||
А в более общем случае sizeof возвращает размер типа данных. Ему без разницы что строка, что массив, что структура, символ, число иди все это вместе. Это легко проверить:
0
|
1 / 1 / 0
Регистрация: 01.08.2023
Сообщений: 23
|
|
02.08.2023, 15:22 | 7 |
Это для C++, а у него C, испорченный MSVC, или C++, испорченный незнанием STL.
Добавлено через 1 минуту sizeof(x) работает во время компиляции, и не знает ничего о массивах с переменным кол-вом элементов. Нельзя забывать о том, что массив - всего лишь указатель на его первый элемент, и, соответственно, sizeof развернется в размер указателя на вашей платформе.
0
|
Вездепух
![]() ![]() ![]() 12866 / 6731 / 1809
Регистрация: 18.10.2014
Сообщений: 17,036
|
|
02.08.2023, 17:52 | 8 |
Это для C++. В языке С
sizeof запросто может работать не во время компиляции. Именно потому, что он знает о массивах с переменным кол-вом элементов.Ни в коем случае. Массив - это массив, а никакой не "указатель на первый элемент". И нельзя забывать о том, что sizeof как раз является общеизвестным хрестоматийным примером одного из трех контекстов, в котором не возникает автоматического преобразования массива к указателю.
0
|
1 / 1 / 0
Регистрация: 01.08.2023
Сообщений: 23
|
||||||
02.08.2023, 19:08 | 9 | |||||
Да, вы правы:
7 EXAMPLE 3 In this example, the size of a variable length array is computed and returned from a function:
Добавлено через 5 минут Про массивы извиняюсь, это на меня написание кастомных аллокаторов так подействовало ![]() Добавлено через 14 минут Ну... Так это и есть C++... Добавлено через 5 минут Кстати, замени эту строку на std::cin.get(), и больше нигде и никогда не используй, ведь она работает только на винде
0
|
02.08.2023, 19:08 | ||||||
Помогаю со студенческими работами здесь
9
Даны две переменные, в первой строка, во второй длина строки, 100 - max длина, строки. Что такое dup('$') ? Строка: Изменить строку так, чтобы длина строки стала равна заданной длине, большей чем текущая длина строки появилась загвоздка с функцией. нужно вывести на экран строку, сост. из звездочек. Длина строки-параметр функциииз звезд. длина строки - Удалить среднюю букву, если длина строки нечетная, и две средних, если длина строки четная
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Сопоставление с образцом (Pattern Matching) в Python: Списки и словари
py-thonny 19.03.2025
Программисты любят, когда код говорит сам за себя. Представьте, что вы можете просмотреть структуру данных и мгновенно понять, что с ней делать — без сложных условий и вложенных проверок. Именно эту. . .
|
Работа с метаданными EXIF и JPEG в JavaScript
run.dev 19.03.2025
Работа с изображениями в веб-разработке нередко выходит за рамки простого отображения картинки. Современные задачи требуют глубокого понимания структуры файлов и умения манипулировать их внутренними. . .
|
Чеклист для Kubernetes в продакшене: Лучшие практики для SRE
Mr. Docker 19.03.2025
Когда сталкиваешься с запуском Kubernetes в продакшене, невольно задаешься вопросом: почему то, что так гладко работало в тестовой среде, вдруг начинает вызывать головную боль на боевых системах?. . .
|
Разработка продвинутого ИИ в Unity с использованием Behavior Graph
GameUnited 19.03.2025
В разработке игр искусственный интеллект персонажей часто становится тем элементом, который превращает хорошую игру в выдающуюся. До недавнего времени разработчикам под Unity приходилось либо писать. . .
|
Словари в Python: методы работы, оптимизация, сериализация
py-thonny 19.03.2025
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который. . .
|
Реализация паттерна CQRS с Event Sourcing в PHP
Jason-Webb 19.03.2025
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение. . .
|
std::span в C++: Подпредставления и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
|
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
|
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
|
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных.
std::span — это легковесный. . .
|