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

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

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

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

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

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

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

Ввести размер массива с клавиатуры и передать этот размер в конструктор - C++
Я создал массив объектов. И я хочу ввести размер этого массива с клавиатуры, и передать этот размер в конструктор, как мне это сделать? ...

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости - C++
Ребята, подскажите, кто может, каким образом создать функцию с применением динамического массива, но так, чтобы размер массива увеличивался...

Функция, которая удаляет из целочисленного одномерного массива все, и возвращает новый размер массива - C++
Разработать и испытать функцию, которая удаляет из целочисленного одномерного массива все, и возвращает новый размер массива. #include...

Удалить из массива все элементы встречающиеся менее 3-х раз и вывести размер полученного массива и его содержимое. - C++
Помогите пожалуйста решить задачу!!!!!! Дан целочисленный массив размера n. Удалить из массива все элементы встречающиеся менее 3-х...

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

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

15
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
03.09.2011, 16:55 #2
Самое простое запомнить, сколько выделяли памяти.
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.09.2011, 17:46 #3
Цитата Сообщение от hello19 Посмотреть сообщение
Нужно создать массив для хранения различных символов (буквы и различные знаки)
Необходимо узнать его размер. Как это сделать? В массиве хранятся
- для строки прото:
длинна массива = strlen(a); //для подключения нужен string.h
1
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
04.09.2011, 02:25 #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
длинна массива = strlen(a);
Ноу, это длина строки. Это не одно и тоже.
0
alkagolik
Заблокирован
04.09.2011, 03:33 #5
Цитата Сообщение от kazak Посмотреть сообщение
Ноу, это длина строки. Это не одно и тоже.
насколько я понял -=ЮрА=-, то имеется ввиду что char = 1 байт => strlen(a) = искомая память в байтах
0
-=ЮрА=-
Заблокирован
Автор 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/clibrary/cstring/strlen/)
Если же есть желание использовать sizeof(a), то число элементов одномерного массива определяется выражением
i
C++
1
nt nElements =  sizeof(a)/sizeof(a[0])
или же
C++
1
sizeof(a)/sizeof((типа переменных массива а))
- указанный приём не работает для динамически созданных массивов - т.е для задания ТС применим только метод со strlen.
0
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;
}
0
-=ЮрА=-
Заблокирован
Автор 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;
}
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
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 ипользуется при работе с указателями.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
04.09.2011, 17:37 #10
hello19, размер динамического массива узнать никак нельзя, так что нужно его запоминать.
Варианты выше с использованием strlen (и его "самописной реализацией") - вообще ни к месту и "длину массива в байтах" не возвращают.
0
Сыроежка
Заблокирован
04.09.2011, 18:21 #11
Цитата Сообщение от rangerx Посмотреть сообщение
Ты присвоил указателю a адрес строкового литерала "123456". В результате сразу две ошибки:
1) неконстантный указатель на константную область памяти;
...
Это не является ошибкой. Стандарт С++ разрешает адрес строкового литерала присваивать неконстантному указателю. Другое дело, что лучше не пользоваться этим, чтобы не вводить пользователей вашего кода в заблуждение.
0
alkagolik
Заблокирован
04.09.2011, 22:51 #12
1) неконстантный указатель на константную область памяти;
2) всё что было выделено с помощью оператора new безвозвратно потеряно(утечка памяти).
да ладно. первое всего лишь для демонстрации, а второе сам ТС задал. К делу... выделен массив char*, тип char = 1 байт, размер массива в байтах разве не равен количеству элементов, исключающих '\0'~NULL? т.е. массив заполнен на 5 элементов, значит размер массива есть 5 байт.
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
04.09.2011, 23:54 #13
Цитата Сообщение от alkagolik Посмотреть сообщение
да ладно. первое всего лишь для демонстрации
Для демонстрации чего? Как делать не надо? ))
Цитата Сообщение от alkagolik Посмотреть сообщение
а второе сам ТС задал.
TC всего лишь выделил память. А ты, вместо того чтобы воспользоваться функцией strcpy, решил её(память) просто "отстегнуть" происвоив указателю совершенно другой адрес... Насчёт самой функции: она вычисляет длину C-строки, но TC ни слова не говорил о строках...
P.S. Проще использовать std::vector<char> и не мучиться )
0
alkagolik
Заблокирован
05.09.2011, 00:47 #14
rangerx, троллить будешь школоту. Я не синтаксис представил, а мысль, которая заключается в том что размер массива char равен количеству элементов массива (? уже в четвертый раз спрашиваю). Синтаксис лепи себе как угодно. Оправдываться еще буду тут... ща в нос дам! шутка конечно. Но ведь ты тоже "юморной" йопт, поймешь.
фотку видишь мою? я такой))
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
05.09.2011, 02:52 #15
Цитата Сообщение от alkagolik Посмотреть сообщение
Я не синтаксис представил, а мысль, которая заключается в том что размер массива char равен количеству элементов массива
это та мысль, которую ты озвучил в посте #7 (или #5)? Так вот, она неверная.
1
05.09.2011, 02:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2011, 02:52
Привет! Вот еще темы с ответами:

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

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

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

Размер двумерного массива - C++
Есть функция void edit(char *file, char **text){ FILE *f; if ((f=fopen(file, &quot;ab&quot;)) == NULL){ printf(&quot;%s %s\n&quot;,file,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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