powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Инициализация массива
6 сообщений из 6, страница 1 из 1
Инициализация массива
    #39613245
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вот такая инициализация массива в экспортируемой функции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#define EXPORT extern "C" __declspec(dllexport)
#define PBCALL __stdcall

EXPORT void PBCALL test( ??? )
{
...
const uint8_t a[24] = "abcdf1234567890";
...
}


Как "1234567890" передавать в качестве параметра этой функции, а потом использовать при инициализации массива?
...
Рейтинг: 0 / 0
Инициализация массива
    #39613265
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
EXPORT PBCALL void   test( const char* param )
{

char a[24];
strncpy(a, param, sizeof a);
a[sizeof a - 1] = 0;

}



С типами только определись - строки это, массивы, или юникодные строки какого то вида.
...
Рейтинг: 0 / 0
Инициализация массива
    #39613491
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglС типами только определись - строки это, массивы, или юникодные строки какого то вида.
мне надо uint8_t, сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
EXPORT PBCALL void test( const char* param )
{
...
uint8_t * u = (uint8_t *)param;
...
}


не уверен можно так или нет, но вроде u заполнился правильно.
может что добавить надо, т.к. sizeof(u) выдает ошибку.
...
Рейтинг: 0 / 0
Инициализация массива
    #39613537
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISSiemarglС типами только определись - строки это, массивы, или юникодные строки какого то вида.
мне надо uint8_t, сделал так:
Код: plaintext
1.
2.
3.
EXPORT PBCALL void test( const char* param )
{
...


Ну и делал бы сразу
Код: plaintext
1.
2.
3.
4.
5.
6.
EXPORT PBCALL void test(const uint8_t *param)
{
...
uint8_t * u = param;
...
}

или
Код: plaintext
1.
2.
3.
4.
5.
6.
EXPORT PBCALL void test(const uint8_t param[])
{
...
uint8_t * u = param;
...
}



AISне уверен можно так или нет, но вроде u заполнился правильно.
может что добавить надо, т.к. sizeof(u) выдает ошибку.sizeof() это функция времени компиляции, а компилятор - не экстрасенс и не знает, какой именно длины массив символов будет, в итоге, передан в test во время выполнения. Для получения количества однобайтных символов в строке с завершающим нулём, используется функция size_t strlen(const char * str) . Короче - RTFM!
...
Рейтинг: 0 / 0
Инициализация массива
    #39613706
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISне уверен можно так или нет, но вроде u заполнился правильно.
может что добавить надо, т.к. sizeof(u) выдает ошибку.
Тебе повезло что получил ошибку, т.к. ее не должно быть, но результат тебя удивит.

Это С/С++, тут указатель это безразмерный массив, т.е. по указателю никак не узнать где конец массива. Обычно вместе с указателем передают размер массива.
...
Рейтинг: 0 / 0
Инициализация массива
    #39613719
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAISне уверен можно так или нет, но вроде u заполнился правильно.
может что добавить надо, т.к. sizeof(u) выдает ошибку.
Тебе повезло что получил ошибку, т.к. ее не должно быть, но результат тебя удивит.

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


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