powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Узнать размер массива.
23 сообщений из 23, страница 1 из 1
Узнать размер массива.
    #39068425
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни. Осваиваю С++. Избалован всякими JAVA и С# :) Возник простой вопрос. Как узнать размер массива в этом случае?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void writeToSerial(char* data, unsigned int size)
{
	for(unsigned int i=0;i<size; i++)
	{
		while(!(UCSRA&(1<<UDRE))){};
		UDR = data[i];
	}
}
===========ГДЕ-ТО В КОДЕ===============
writeToSerial("HELLO!",6);

======!ХОЧЕТСЯ ТАК!=======
writeToSerial("HELLO!");



Вообщем хочется чтобы функция сама посчитала размер. Заранее спасибо.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068432
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,

Код: plaintext
1.
2.
3.
4.
5.
template <std::size_t t_size>
void Func( char const (&a_source)[t_size] )
{
    // Тут t_size - размер массива. Или длинна строки + 1 байт.
}
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068435
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

и наплодит компилятор функций writeToSerial<5>, writeToSerial<13>, writeToSerial<42> по всему коду. Уж лучше string параметром передать.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068437
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel,

Так же можно перейти на С++, а именно на использование std::string, std::vector, std::array. Там есть доступ к длинам строк и массивов.

В данном случае:

Код: plaintext
1.
2.
3.
4.
void Func( std::string const &a_str )
{
    std::size_t const len = a_str.length();
}
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068465
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavel, ты передаёшь ASCIIZ-строку? Тогда size тебе не нужен.

Придумай другой более актуальный кейс.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068467
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravGorloPavel,

Так же можно перейти на С++, а именно на использование std::string, std::vector, std::array. Там есть доступ к длинам строк и массивов.

В данном случае:

Код: plaintext
1.
2.
3.
4.
void Func( std::string const &a_str )
{
    std::size_t const len = a_str.length();
}



Пишу для микроконтроллера. Надо экономить


Сделал вот так. Но как я понимаю это актуально только для "строк" или последовательностью заканчивающейся на \0. Какие проблемы могут быть в этом случае?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void writeToSerial(char* data)
{
	while ((*data)!='\0'){
		while(!(UCSRA&(1<<UDRE))){};
		UDR = (*data);
		data++;
	}
}
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068486
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelСделал вот так. Но как я понимаю это актуально только для "строк" или последовательностью заканчивающейся на \0. Какие проблемы могут быть в этом случае?
Проблемы будут если передадут битую строку без 0 на конце. Если ноль будет, то будет работать как код в первом посте.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068578
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelПишу для микроконтроллера.
Аааа... Ну тогда ваш последний код вполне подойдёт. Есть еще функция strlen(char *).

А ваш первый ваш код, конечно, ужасен.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068639
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelПарни. Осваиваю С++. Избалован всякими JAVA и С# :) Возник простой вопрос. Как узнать размер массива в этом случае?

Вообщем хочется чтобы функция сама посчитала размер. Заранее спасибо.

Массив -- не объект, а адрес в памяти определённого, заранее известного (тебе при объявлении) размера.

Если тебе нужен функционал "объект массива с размером", используй std::vector.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068753
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GorloPavelПарни. Осваиваю С++. Избалован всякими JAVA и С# :) Возник простой вопрос. Как узнать размер массива в этом случае?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void writeToSerial(char* data, unsigned int size)
{
	for(unsigned int i=0;i<size; i++)
	{
		while(!(UCSRA&(1<<UDRE))){};
		UDR = data[i];
	}
}
===========ГДЕ-ТО В КОДЕ===============
writeToSerial("HELLO!",6);

======!ХОЧЕТСЯ ТАК!=======
writeToSerial("HELLO!");



Вообщем хочется чтобы функция сама посчитала размер. Заранее спасибо.

Как уже сказали строка ограничена спецсимволом '\0'

Извиняюсь за офтоп: А что, по прерыванию нельзя выводить?

И потом зачем в микроконтроллере использовать C++? ИМХО при всем к нему уважении достаточно C
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068823
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YesSqlИ потом зачем в микроконтроллере использовать C++? ИМХО при всем к нему уважении достаточно C
Ради жесткой статической типизации и контроля сигнатур функций? Во время исполнения мы за это не платим. ЕМНИП, в С все указатели можно как угодно присваивать и вплоть до того, что не проверяются сигнатуры функций из разных единиц компиляции (при вызове).
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068826
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока не озвучены характеристики микроконтроллера - спор ни о чём
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068870
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelИзбалован всякими JAVA и С# :) Возник простой вопрос. Как узнать размер массива в этом случае?А как бы ты его узнал на 'всяких JAVA и С#' ?
off ... о это сладкое слово 'Надо экономить' AtmelAVR ))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#define	__PM __flash
#define	__EE __eeprom

typedef CHAR  __PM PMCHAR;
typedef WORD  __PM PMWORD;
typedef DWORD __PM PMDWORD;
typedef CHAR  __EE EECHAR;
typedef WORD  __EE EEWORD;
typedef DWORD __EE EEDWORD;

typedef PMCHAR  PMSTR[];
typedef EECHAR  EESTR[];

//---
PMSTR taOK       = "OK\x0D\x0A";



...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068911
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bred eFeMGorloPavelИзбалован всякими JAVA и С# :) Возник простой вопрос. Как узнать размер массива в этом случае?А как бы ты его узнал на 'всяких JAVA и С#' ?
off ... о это сладкое слово 'Надо экономить' AtmelAVR ))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#define	__PM __flash
#define	__EE __eeprom

typedef CHAR  __PM PMCHAR;
typedef WORD  __PM PMWORD;
typedef DWORD __PM PMDWORD;
typedef CHAR  __EE EECHAR;
typedef WORD  __EE EEWORD;
typedef DWORD __EE EEDWORD;

typedef PMCHAR  PMSTR[];
typedef EECHAR  EESTR[];

//---
PMSTR taOK       = "OK\x0D\x0A";





Через метод .Length .Size. А что?
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068912
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпока не озвучены характеристики микроконтроллера - спор ни о чём

Atmega8
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068979
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот в программировании микроконтроллеров дилетанты совсем не нужны. Потом спутники падают.

Читай учебники сначала.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39068990
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да чорт сним со спутником. Спишут бабло. Вот самолёт с людьми упадёт - это да.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39069133
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GorloPavelЧерез метод .Length .Size. А что?А . перед точечкой . что?
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39069142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bred eFeMGorloPavelЧерез метод .Length .Size. А что?А . перед точечкой . что?
Перед точечкой - char[]. Не надо эскалировать. Все всё поняли.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39069179
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivGorloPavelПарни. Осваиваю С++. Избалован всякими JAVA и С# :) Возник простой вопрос. Как узнать размер массива в этом случае?

Вообщем хочется чтобы функция сама посчитала размер. Заранее спасибо.

Массив -- не объект, а адрес в памяти объекта программы определённого, заранее известного (тебе при объявлении) размера.

Если тебе нужен функционал "объект массива с размером", используй std::vector.
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39069186
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bred eFeMGorloPavelЧерез метод .Length .Size. А что?А . перед точечкой . что?

перед точкой массив. в Яве массив -это объект системного встроенного класса с атрибутом "размер".
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39069989
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
появился новый веб сервер, h2o, там такой макрос

Код: sql
1.
h2o/string_.h:37:#define H2O_STRLIT(s) (s), sizeof(s) - 1



вот пример использования

Код: sql
1.
h2o_concat(NULL, h2o_iovec_init(H2O_STRLIT("--pid-file=")), h2o_iovec_init(conf.pid_file, strlen(conf.pid_file))).base;
...
Рейтинг: 0 / 0
Узнать размер массива.
    #39070088
GorloPavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглВот в программировании микроконтроллеров дилетанты совсем не нужны. Потом спутники падают.

Читай учебники сначала.
))))))) Я тут светодиодиками моргаю ;)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Узнать размер массива.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]