Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

strlen - C++

28.06.2012, 14:56. Просмотров 1709. Ответов 24
Метки нет (Все метки)

Есть ли подобие strlen, но для других типов данных? int*, short* и тп?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2012, 14:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос strlen (C++):

strlen - C++
добрый вечер. пытаюсь придумать менее затратный strlen) вопрос появился: максимальный размер строки без выделения в куче и с выделением...

strlen - C++
Или я дурак,или лыжи не едут??? Люди добрые, скажите чего не так. Не могу определить длину строки. Хоть вручную считай... вот код int...

strlen()+1 - C++
Зачем использовать strlen в данном случае? char s; get.cin(s,strlen(s)+1);

Не работает strlen - C++
сабж не могу взять длину строки функция определения возвращает не понятные значения #include <stdlib.h> #include <stdio.h> ...

своя strlen - C++
#include<iostream.h> int strlen(char *string) { int lengh=0; while(*string++) lengh++; return ++lengh; } ...

функция strlen - C++
#include "stdafx.h" #include <stdio.h> #include <conio.h> #include <string.h> #define maxline 1000 // for s #define eof -1...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OcbMuHor
Заблокирован
28.06.2012, 15:40 #16
Цитата Сообщение от ForEveR Посмотреть сообщение
Возвращает размер, но учитывает так же информацию, которая забита в этот кусок памяти для free.
в таком случае
C++
1
int *s = new int [10];
инфа для free() содержится в байтах s[ 10 ]?
0
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 15:42  [ТС] #17
MrGluck, 1) для понимания иногда нужно написать "велосипед"
2) если бы люди не изобретали велосипеды дальше, прогресс бы остановился
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.06.2012, 15:43 #18
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
#include <malloc.h>
 
int main()
{
   int* array = new int[10];
   std::cout << malloc_usable_size(array) << std::endl;
   delete[] array;
   return 0;
}
http://liveworkspace.org/code/50977d...c282b046f6ce46

Правда скорее даже не для free, а просто служебная информация, а где она используется - дело десятое.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
28.06.2012, 15:45 #19
для понимания иногда нужно написать "велосипед"
Для понимания достаточно один раз его описать, а дальше брать уже готовые решения.
0
OcbMuHor
Заблокирован
28.06.2012, 15:52 #20
Цитата Сообщение от ForEveR Посмотреть сообщение
Правда скорее даже не для free, а просто служебная информация, а где она используется - дело десятое.
очень смутно припоминаю у Страуструппа замечания об "элементе, стоящем за последним элементом массива".
malloc_usable_size не содержит информации для free.
http://liveworkspace.org/code/f19bd0...568c7ca6a2437a
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 16:00 #21
Цитата Сообщение от OcbMuHor Посмотреть сообщение
инфа для free() содержится в байтах s[ 10 ]?
Нет, кусок выделенной памяти о себе информации не содержит.
0
OcbMuHor
Заблокирован
28.06.2012, 16:12 #22
Цитата Сообщение от ЛетающийЕнот Посмотреть сообщение
Нет, кусок выделенной памяти о себе информации не содержит.
s[ 10 ] это не кусок выделенной памяти, это байты, "следующие" за массивом.
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 16:38 #23
OcbMuHor, спасибо.
Запутался из-за формулировки
байтах s[ 10 ]

Не по теме:

Когда-то тоже читал про элемент после конца массива в статье про аллокаторы.

0
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
28.06.2012, 21:44 #24
Цитата Сообщение от OcbMuHor Посмотреть сообщение
s[ 10 ] это не кусок выделенной памяти, это байты, "следующие" за массивом.
Чтобы найти элемент в конце массива, надо точно знать размер массива. А именно эту информацию и имеет смысл хранить для free. Информация о размере выделенной памяти может располагаться либо в начале блока, перед массивом, либо где-то в совершенно отдельном месте. В конце, за массивом, может храниться какая-либо другая информация. А может и не храниться.
0
ЛетающийЕнот
88 / 67 / 12
Регистрация: 28.06.2012
Сообщений: 161
28.06.2012, 21:48 #25
Цитата Сообщение от grizlik78 Посмотреть сообщение
Информация о размере выделенной памяти ... в совершенно отдельном месте.
Напомнило: при динамическом размещении в "куче" используется список блоков. Однозначно, ответ.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 21:48
Привет! Вот еще темы с ответами:

Проблема с strlen - C++
Доброго времени суток. При подсчете длин строки strlen считает до 1 пробела, в итоге в 2 строке только 1 слово из 1 строки. В чем может...

C++ <cstring> strlen() - C++
Народ, может ли функция strlen() обрабатывать тип не const char, а char ? компилятор ошибку выдаёт str.insert(Position_Begin(c),...

Объясните разницу в strlen() - C++
Вот код: char ch = &quot;Hello, World!&quot;; char ch2 = {'H','e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'}; // тоже самое...

Почему не работает strlen()??? - C++
Код программы: #include&lt;string&gt; #include&lt;iostream&gt; using namespace std; int main(){ string s; getline(cin, s, '\n'); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.06.2012, 21:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru