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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 161, средняя оценка - 4.93
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
#1

Размер массива - C++

03.09.2011, 16:49. Просмотров 22891. Ответов 15
Метки нет (Все метки)

Нужно создать массив для хранения различных символов (буквы и различные знаки)
Необходимо узнать его размер. Как это сделать? В массиве хранятся

C++
1
2
// символы поодиночке
char *a = new char [35];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2011, 16:49     Размер массива
Посмотрите здесь:

Размер массива - C++
Здрасте. Такой вопрос.Можно ли каким то образом вывести число элементов массива,то есть его размер? Допустим int arr; Программа...

Размер массива - C++
Можно ли изменить размер обычного массива?

Размер массива - C++
Почему это работает? И как это понимать? #include "stdafx.h" #include <iostream> using namespace std; template <size_t Len> ...

Размер динамического массива - C++
Как узнать сколько заполненных елементов в динамическом массиве, если под него выделено 400 элементов.Т.е. узнать сколько элементов из них...

Узнать размер массива - C++
есть 2 указателя на первый элемент массива и указатель на элемент после последнего можно ли как-то узнать размер этого массива не...

Огромный размер массива - C++
Как присвоить массиву типу char размер 10100. Или придется писать char mass[1000000... Может есть какая функция, увеличивающая размер...

Размер массива по указателю - C++
Не уверен, что всё правильно понимаю... Про "new" пишут, что оно выделяет необходимое количество памяти и возвращает указатель на начало...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
03.09.2011, 16:55     Размер массива #2
Самое простое запомнить, сколько выделяли памяти.
-=ЮрА=-
Заблокирован
Автор FAQ
03.09.2011, 17:46     Размер массива #3
Цитата Сообщение от hello19 Посмотреть сообщение
Нужно создать массив для хранения различных символов (буквы и различные знаки)
Необходимо узнать его размер. Как это сделать? В массиве хранятся
- для строки прото:
длинна массива = strlen(a); //для подключения нужен string.h
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.09.2011, 02:25     Размер массива #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
длинна массива = strlen(a);
Ноу, это длина строки. Это не одно и тоже.
alkagolik
Заблокирован
04.09.2011, 03:33     Размер массива #5
Цитата Сообщение от kazak Посмотреть сообщение
Ноу, это длина строки. Это не одно и тоже.
насколько я понял -=ЮрА=-, то имеется ввиду что char = 1 байт => strlen(a) = искомая память в байтах
-=ЮрА=-
Заблокирован
Автор FAQ
04.09.2011, 12:08     Размер массива #6
Цитата Сообщение от kazak Посмотреть сообщение
Ноу, это длина строки.
поэтому и оговорил
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- для строки прото:
(писал под пример ТС
Цитата Сообщение от hello19 Посмотреть сообщение
// символы поодиночке
char *a = new char [35];
)


Цитата Сообщение от alkagolik Посмотреть сообщение
насколько я понял -=ЮрА=-, то имеется ввиду что char = 1 байт => strlen(a)
- нет ты путаешь sizeof(a) со strlen(a) (см здесь http://www.cplusplus.com/reference/c...string/strlen/)
Если же есть желание использовать sizeof(a), то число элементов одномерного массива определяется выражением
i
C++
1
nt nElements =  sizeof(a)/sizeof(a[0])
или же
C++
1
sizeof(a)/sizeof((типа переменных массива а))
- указанный приём не работает для динамически созданных массивов - т.е для задания ТС применим только метод со strlen.
alkagolik
Заблокирован
04.09.2011, 16:35     Размер массива #7
оно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int sizeMass(char mass[]);
int main()
{
    char/*1 байт*/ *a = new char[35];
    a= "123456";
    std::cout << "длина массива в байтах = " << sizeMass(&a[0]) << "\n" << a;
    return 0;
}
int sizeMass(char mass[]){
    int i=0;
    while (mass[i]!= NULL) ++i;
    return i;
}
-=ЮрА=-
Заблокирован
Автор FAQ
04.09.2011, 16:44     Размер массива #8
Цитата Сообщение от alkagolik Посмотреть сообщение
int sizeMass(char mass[]){
* * int i=0;
* * while (mass[i]!= NULL) ++i;
* * return i;
}
- эквивалентно strlen(mass), зачем код удлинять?

Добавлено через 2 минуты
PS:Не веришь, убедись сам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstring>
 
int sizeMass(char mass[]);
int main()
{
    char/*1 ГЎГ*éò*/ *a = new char[35];
    a= "123456";
    std::cout << "äëèГ*Г* Г¬Г*Г±Г±ГЁГўГ* Гў ГЎГ*éòГ*Гµ = " <<sizeMass(&a[0])<<"\r\n";
    std::cout << "äëèГ*Г* Г¬Г*Г±Г±ГІГўГ* ГЇГ® strlen = "<<strlen(a)<<"\r\n";
    return 0;
}
int sizeMass(char mass[]){
    int i=0;
    while (mass[i]!= NULL) ++i;
    return i;
}
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
04.09.2011, 17:31     Размер массива #9
Цитата Сообщение от hello19 Посмотреть сообщение
Необходимо узнать его размер. Как это сделать? В массиве хранятся
C++
1
2
// символы поодиночке
char *a = new char [35];
Во-первых размер массива тебе и так всегда известен(потому как ты этот размер и устанавливаешь). Во-вторых абсолютно непонятно зачем ты используешь динамический массив как статический(задаешь размер константой).

Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
2
char/*1 байт*/ *a = new char[35];
 a= "123456";
Ты присвоил указателю a адрес строкового литерала "123456". В результате сразу две ошибки:
1) неконстантный указатель на константную область памяти;
2) всё что было выделено с помощью оператора new безвозвратно потеряно(утечка памяти).
Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
while (mass[i]!= NULL)
Принципиально неверное использование макроса NULL. В конце C-строк находится символ '\0'. Макрос NULL ипользуется при работе с указателями.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
04.09.2011, 17:37     Размер массива #10
hello19, размер динамического массива узнать никак нельзя, так что нужно его запоминать.
Варианты выше с использованием strlen (и его "самописной реализацией") - вообще ни к месту и "длину массива в байтах" не возвращают.
Сыроежка
Заблокирован
04.09.2011, 18:21     Размер массива #11
Цитата Сообщение от rangerx Посмотреть сообщение
Ты присвоил указателю a адрес строкового литерала "123456". В результате сразу две ошибки:
1) неконстантный указатель на константную область памяти;
...
Это не является ошибкой. Стандарт С++ разрешает адрес строкового литерала присваивать неконстантному указателю. Другое дело, что лучше не пользоваться этим, чтобы не вводить пользователей вашего кода в заблуждение.
alkagolik
Заблокирован
04.09.2011, 22:51     Размер массива #12
1) неконстантный указатель на константную область памяти;
2) всё что было выделено с помощью оператора new безвозвратно потеряно(утечка памяти).
да ладно. первое всего лишь для демонстрации, а второе сам ТС задал. К делу... выделен массив char*, тип char = 1 байт, размер массива в байтах разве не равен количеству элементов, исключающих '\0'~NULL? т.е. массив заполнен на 5 элементов, значит размер массива есть 5 байт.
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
04.09.2011, 23:54     Размер массива #13
Цитата Сообщение от alkagolik Посмотреть сообщение
да ладно. первое всего лишь для демонстрации
Для демонстрации чего? Как делать не надо? ))
Цитата Сообщение от alkagolik Посмотреть сообщение
а второе сам ТС задал.
TC всего лишь выделил память. А ты, вместо того чтобы воспользоваться функцией strcpy, решил её(память) просто "отстегнуть" происвоив указателю совершенно другой адрес... Насчёт самой функции: она вычисляет длину C-строки, но TC ни слова не говорил о строках...
P.S. Проще использовать std::vector<char> и не мучиться )
alkagolik
Заблокирован
05.09.2011, 00:47     Размер массива #14
rangerx, троллить будешь школоту. Я не синтаксис представил, а мысль, которая заключается в том что размер массива char равен количеству элементов массива (? уже в четвертый раз спрашиваю). Синтаксис лепи себе как угодно. Оправдываться еще буду тут... ща в нос дам! шутка конечно. Но ведь ты тоже "юморной" йопт, поймешь.
фотку видишь мою? я такой))
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
05.09.2011, 02:52     Размер массива #15
Цитата Сообщение от alkagolik Посмотреть сообщение
Я не синтаксис представил, а мысль, которая заключается в том что размер массива char равен количеству элементов массива
это та мысль, которую ты озвучил в посте #7 (или #5)? Так вот, она неверная.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2011, 03:16     Размер массива
Еще ссылки по теме:

Размер динамического массива - C++
Здравствуйте, есть ли какая функция, которая возвращает размер динамического массива (желательно для 2-х мерного)? если мне, к примеру, в...

Размер массива в структурах - C++
1. Я могу в структуре объявить массив неопределенного размера? 2. Как узнать размер массива в структуре по типу string.length() ? 3....

Размер динамического массива - C++
Здравствуйте. Есть такой код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include &lt;ctime&gt; using namespace std; ...

Определить размер массива - C++
Дано массив типа int с числами. В нем есть элемент, который равен 0. Мне нужно найти размер этого массива, а точней его конец. Когда я...

Размер массива объектов - C++
Метод Count() подсчёта количества элементов массива (массив из сообщений) не правильно распознаёт элементы,заполняет и выводит правильно а...


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

Или воспользуйтесь поиском по форуму:
alkagolik
Заблокирован
05.09.2011, 03:16     Размер массива #16
Цитата Сообщение от Nameless One Посмотреть сообщение
это та мысль, которую ты озвучил в посте #7 (или #5)? Так вот, она неверная
ну наконец-то дождался ответа
Yandex
Объявления
05.09.2011, 03:16     Размер массива
Ответ Создать тему
Опции темы

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