Определение длины строки в С и С++
Главное различие в том, что функция strlen вычисляет длину строки, а оператор sizeof к вычислению длины строки никакого отношения не имеет. Оператор sizeof используется для определения размера памяти занимаемой сущностью. При работе со строками он может быть применим только к строкам, определенным на стеке и константным строкам. Механизм работы можно увидеть на примере:
char *pStr = "string"; char str[20]; strcpy(str, pStr); int len1 = strlen(pStr); // = 6 int len2 = strlen(str); // = 6 int len3 = sizeof(pStr); // = 4, если используется 32-х битная система int len4 = sizeof(str); // = 20 int len5 = sizeof("string"); // = 7
Отслеживать
9,325 6 6 золотых знаков 23 23 серебряных знака 57 57 бронзовых знаков
ответ дан 24 ноя 2010 в 12:52
Nicolas Chabanovsky Nicolas Chabanovsky
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
sizeof — это оператор языка, применяемый для определения размера типа данных в байтах. Значение выражения с использованием sizeof определяется во время компиляции кода, за исключением ряда случаев, например, для массивов переменной длины, определенных в C99.
strlen — это функция стандартной библиотеки C, применяемая для определения длины строки, оканчивающейся нулем. Значение выражения с использованием вызова strlen определяется во время выполнения кода.
Отслеживать
ответ дан 25 ноя 2010 в 11:28
34.5k 25 25 золотых знаков 97 97 серебряных знаков 214 214 бронзовых знаков
Обращу внимание, что sizeof возвращает размер объекта в байтах. Т.е. обычно это максимальная длина строки, которая влезает в массив char’ов.
strlen — это функция стандартной библиотеки для определения длины 0-terminated строки. Возвращает кол-во символов без терминирующего 0. Т.е. реально занимаемый в памяти объем строки равен как минимум результату выполнения strlen + 1 байт.
Реально проблемы обычно возникают при работе с Юникодом, т.е. с типами wchar или TCHAR и соответствующими ф-циями. Потому что юникодовские символы занимают не 1 байт, а 2. И поэтому смешивать кол-во символов и размер их в памяти, получается, уже не стоит. А учитывая, что многие программы рано или поздно придется переделывать — лучше сразу заложить возможность для этого. Т.е. итого — запоминаем, что ф-ции работы со строками обычно требуют размер (или макс. размер) строки в символах, а ф-ции работы с памятью — обычно в байтах.
Для определения максимального кол-ва элементов (т.е. символов в строке) под MSVC я использовал макрос _countof. Мне он показался достаточно удобным.
Найти длину строки
Очень простая программа, но мне компьютер выдает такие ошибки:
\24=найти длину строки.cpp(15) : error C3861: ‘dlina’: identifier not found
\24=найти длину строки.cpp(24) : error C2365: ‘dlina’ : redefinition; previous definition was ‘formerly unknown identifier’
что они обозначают?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Найти длину той части строки s1, которая содержит только символы из строки s2
Необходимо реализовать функцию, которая находит длину той части строки s1, которая содержит только.
Преобразовать файл, чтобы все строки имели длину, не превышающую длину наименьшей
Здравствуйте! Помогите с алгоритмом задачи: Дан текстовый файл. Преобразовать его таким образом.
Определить длину введенной строки L, и, если длина кратна 2, удалить из строки все четные числа
Ввести с клавиатуры строку текста, содержащего символы английского алфавита и целые числа. В.
Получить длину строки
Ребзя, не выводит длину сроки. в чем моя ошибка? #include <stdio.h> #include <string.h> int.
Определение длины строки на C++
02.03.2021 Программирование Комментарии: 0 Давыдов В. Г.
В этом примере вы научитесь вычислять длину (размер) строки на C++(как строковых объектов, так и строк в стиле C).
Функции size() и length() – просто синонимы, и обе они делают одно и то же.
#include using namespace std; int main() < string str = "C++ Programming"; // you can also use str.length() cout String Length = 15
Пример: длина строки C-стиля
#include #include using namespace std; int main() < char str[] = "C++ Programming is awesome"; // you can also use str.length() cout String Length = 26
- Преобразование восьмеричного числа в десятичное и наоборот в C++
- Преобразование двоичного числа в восьмеричное и наоборот в C++
- Как перевернуть строку в C++
- Свежие записи
- Функция iscntrl() в C++
- Функция isdigit() в С++
- Функция isblank() в C++
- Функция isgraph() в C++
- Функция islower() в C++
Определение длины строки C++
Задача определения длины строки ( в этой статье под понятием строки мы подразумеваем массив символов char * ) в C++ решается достаточно просто:
#include #include using namespace std; int main()< char str[100]; printf("Enter some string: "); // Read string scanf("%99s", str); printf("Length of string str is %lu\n", strlen(str)); return 0; >
Это относительно простой способ вычисления длины строки. Но эта статья не для того пишется, чтобы рассказать о замечательной функции strlen(), а для того, чтобы объяснить как вычислить длину строки, не прибегая к ней и не подключая заголовочный файл string.h Вся сложность работы со строками в C++ заключается в основном в понимании самой сути: что такое строки? А ведь это всего лишь массив символов. . МАССИВ . Вот и для решения задач со строками нужно подходить к ним как к массивам. Но при этом запомним, что у данных типов массивов есть свои особенности. Одна из них понадобится нам в этом примере: Любая строка всегда заканчивается нулевым символом "\0". Этот закон облегчит нам задачу сегодня. Итак: вычисление длины строки. Во-первых задав строку, мы должны определить максимальную длину строки. Допустим номер телефона может содержать максимум 16 символов (+7 495 ххх хх хх). Т.е. мы имеем
char phone[16];
Но вот она - первая ошибка! Всегда нужно учитывать нулевой символ в конце каждой строки. Поэтому правильно будет задать длину массива 17 символов:
char phone[17];
С этим разобрались. Теперь легко решается задача вычисления длины строки. Если бы всегда строка заполняла весь массив, то мы бы не читали этот длинный нудный пост. Но чаще всего это не так. Мы привыкли задавать переменную для внесения имени char name[100]. Я даже представить не могу имя, длиною в 99 символов. Для моего имени достаточно было бы массива с 5 элементами. Поэтому вычисление длины строки должно сводиться к вычислению количества заполненных элементов массива символов. Но и тут возникает проблема: после того, как вы введете свое имя, программа автоматически поставит после последнего символа имени нулевой символ и оставшиеся элементы массива заполнит черт знает чем. Это зависит от компилятора, ОС, архитектуры. Да кто бы знал от чего это зависит? Именно поэтому задача не в вычислении количества заполненных элементов массива, а в поиске нулевого символа. Именно здесь мы и понимаем насколько он важен. А чем? Тем, что индекс нулевого символа в массиве - это и есть длина строки. Убедимся: