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

strlen - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 14:56     strlen #1
Есть ли подобие strlen, но для других типов данных? int*, short* и тп?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2012, 14:56     strlen
Посмотрите здесь:

Проблема с strlen C++
C++ strlen
C++ strlen()+1
функция strlen C++
своя strlen C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,402
28.06.2012, 14:58     strlen #2
sizeof(arr) / sizeof(*arr)
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 15:03  [ТС]     strlen #3
Спасибо!

Добавлено через 2 минуты
MrGluck, а зачем тогда нужен strlen, если для char* можно использовать абсолютно то же?
OcbMuHor
Заблокирован
28.06.2012, 15:07     strlen #4
MrGluck,
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    int *pArray = new int[ 10 ];
    std::cout << ( sizeof( pArray ) / sizeof( *pArray ) ) << std::endl;
    delete [] pArray;
 
    return 0;
}
Цитата Сообщение от Ksan Посмотреть сообщение
Есть ли подобие strlen, но для других типов данных? int*, short* и тп?
а зачем? Зачем работать с массивом не зная его размер? указатели для чего?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.06.2012, 15:08     strlen #5
MrGluck, Ну все таки для указателей такой вариант не покатит. Нет, для указателей нет никакой переносимой возможности узнать это.
OcbMuHor
Заблокирован
28.06.2012, 15:18     strlen #6
ForEveR, а что насчет непереносимой возможности?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,402
28.06.2012, 15:23     strlen #7
Да, мой вариант катит только для статических массвов. Ну тогда никак, с динамическими надо всегда рядом с массивом передавать его размерность.

Слышал что-то про то, что можно все-же как-то достать размер у динамического, но это делается на конкретных компиляторах конкретной реализацией.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 15:27  [ТС]     strlen #8
Меня интересовали динамические.

На вопрос зачем: что бы не передавать все время размер. Это неудобно.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.06.2012, 15:34     strlen #9
Ksan, Юзай вектор. В чем трабл?

OcbMuHor, Ну для gcc к примеру malloc_usable_size. Возвращает размер, но учитывает так же информацию, которая забита в этот кусок памяти для free.
OcbMuHor
Заблокирован
28.06.2012, 15:34     strlen #10
Цитата Сообщение от Ksan Посмотреть сообщение
Это неудобно
весомый аргумент . Т.е. вычислять в рантайме, тратя на это много 100500 тактов - это удобно, а кинуть аргумент в стек или регистр это неудобно...
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 15:37  [ТС]     strlen #11
ForEveR, не люблю вектора. К тому же когда пишешь свой класс для общего случая, лучше не помещать внутрь другие классы, что бы не получилась цепочка зависимостей.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.06.2012, 15:38     strlen #12
Ksan, Серьезно? То есть стандартная библиотека написана просто так? Разочарую вас капитально, когда пишешь свой класс - можно и нужно пользоваться тем, что написано до этого.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,402
28.06.2012, 15:39     strlen #13
Это неудобно.
- Это логично.
А вобще да, STL позаботился о том, чтобы все было "удобно". Но, ИМХО, научись ка лучше сначала с динамическими массивами работать, а то будет серьезный пробел в знании.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 15:40  [ТС]     strlen #14
MrGluck, я умею работать с динамическими массивами. На основе чего вы сделали вывод о моем незнании?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,402
28.06.2012, 15:40     strlen #15
Ksan, пиши свои велосипеды. Квадратные колеса - это модно. В STL уже все придумано для того, чтобы твой код был не только удобен, но и расширяем. А к тому, что ты напишешь, скорее всего, и багажник не прикрутишь.
OcbMuHor
Заблокирован
28.06.2012, 15:40     strlen #16
Цитата Сообщение от ForEveR Посмотреть сообщение
Возвращает размер, но учитывает так же информацию, которая забита в этот кусок памяти для free.
в таком случае
C++
1
int *s = new int [10];
инфа для free() содержится в байтах s[ 10 ]?
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
28.06.2012, 15:42  [ТС]     strlen #17
MrGluck, 1) для понимания иногда нужно написать "велосипед"
2) если бы люди не изобретали велосипеды дальше, прогресс бы остановился
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.06.2012, 15:43     strlen #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, а просто служебная информация, а где она используется - дело десятое.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,402
28.06.2012, 15:45     strlen #19
для понимания иногда нужно написать "велосипед"
Для понимания достаточно один раз его описать, а дальше брать уже готовые решения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2012, 15:52     strlen
Еще ссылки по теме:

strlen C++
C++ <cstring> strlen() C++
C++ Не работает функция strlen

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

Или воспользуйтесь поиском по форуму:
OcbMuHor
Заблокирован
28.06.2012, 15:52     strlen #20
Цитата Сообщение от ForEveR Посмотреть сообщение
Правда скорее даже не для free, а просто служебная информация, а где она используется - дело десятое.
очень смутно припоминаю у Страуструппа замечания об "элементе, стоящем за последним элементом массива".
malloc_usable_size не содержит информации для free.
http://liveworkspace.org/code/f19bd0...568c7ca6a2437a
Yandex
Объявления
28.06.2012, 15:52     strlen
Ответ Создать тему
Опции темы

Текущее время: 12:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru