как я могу это сделать?
include <файл в конце стрелки>
в h файл в начале стрелки. Стрелки использования добавляют include <файл в конце стрелки>
в cc файл в начале стрелки. ONESTOPBIT ломало передачу блока
DWORD ComIface::write(byte* data, int count)
DWORD ComIface::read_block(byte* buffer, int size)
hpet rt; while (get_stats().cbInQue < size) { if (!SetCommMask(port_handle, EV_RXCHAR)) { printf("SetCommMask failed with error %d.\n", GetLastError()); return NumberOfBytesRead; } WaitCommEvent(port_handle, &status, &overlap); WaitForSingleObject(overlap.hEvent, read_delay); if (rt.get_ms_dt_weak().count() > read_delay * size) { return NumberOfBytesRead; } }
Какие проблемы приводят к такому и как это чинить?
static button s1;
в заголовочном файле, а это значит, что каждая единица трансляции в которую ты подключил этот файл получит свой собственный, независимый экземпляр переменной s1. Функция ModesInit
инициализирует s1 из ModeDriver.o
, а s1 из main.o
останется неинициализированным.static
на extern
в заголовочном файле, а в одном из исходников добавив определение для переменной -- button s1;
. traverse_loop
держит указатель на текущую запись в eax
, но первый же вызов PrintName
портит почти все регистры и не восстанавливает их, поэтому первый же movzx esi, byte [eax + 10h]
после этого вызова обращается мимо памяти и вызывает segfault. Проще всего это исправить каким-нибудь pusha
/ popa
вокруг тела PrintName
. После этого ты доберёшься до вызова PrintMark
, где увидишь, что эта функция ожидает в eax + 10h
текстового представления оценки, а у тебя пока есть только двоичное. Шифрование происходит следующим образом:
Создается хеш ключа с помощью SHA512(его размер = 16 байт).
Для каждого из 16 блоков хеша создается случайное число с помощью Random, используя значение блока в качестве начального числа.
Создается массив байтов того же размера, что и ввод, и заполняется случайными числами.
Каждый байт ввода XOR-суммируется с соответствующим байтом массива байтов.
что я сделал не так, подскажите пожалуйста
if (b[i] >= x || b[i] <= y) { a[j] = b[i]; j++; } ... if (b[i] < x || b[i] > y) { a[j] = b[i]; j++; }
if
не являются взаимоисключающими, а значит j
может стать больше чем n
и запись в a[j]
вылезет за границу массива.if (!(b[i] >= x || b[i] <= y))
и это гарантирует, что индекс не выйдет за пределы массива, вне зависимости от правильности первого условия. sizeof(dict)/sizeof(const char)
const char
а не на размер const char *
. Во избежание таких ошибок для вычисления размера массива обычно пишут sizeof(dict)/sizeof(dict[0])
. можно подумать, что при объявлении указателя, символ * относится к имени(не как часть, а как что-то зависящее от него), а не к типу.
const char *a, b;
можно превратить в const char (*a), b
, но нельзя превратить в const (char *a), b
или в char (const *a), b
.uint8_t led_state = 0x03; Данной командой мы завели переменную, которая равна 3
что под этим подразумевается?
HAL_GPIO_WritePin(GPIOE, led_state << 8, GPIO_PIN_SET); Это я так понимаю мы сначала устанавливаем самый первый светодиод, т.е. 8, но на практике ни так.
led_state = led_state >> 1 | led_state << 7;Эту строку совсем не понимаю.
Взял первый пример HTTP сервера на официальном сайте Boost
add_executable(main main.cpp)
http::server::server::server
. Почему программы с одних адресов начинаются?
Вот есть Tlb, представим это как линейный массив, или c , если все адреса будут одинаковы. То Очевидно что tlb будет работать в 1% своего множества
initialization of 'hInstanse' is skipped by 'case' label, почему?
switch (uMsg) { ... case WM_CREATE: //получаем дескриптор приложения HINSTANCE hInstance = GetModuleHandle(0); ... break; case WM_MOUSEMOVE: //устанавливаем тот или иной курсор в зависимости от местонахождения мыши ...
WM_MOUSEMOVE
код попадёт в область где hInstance определён, но минует его инициализацию. Компилятор туповат, чтобы понять, что hInstance дальше не используется. Простейший фикс -- обернуть код обработчиков в блоки:switch (uMsg)
{
...
case WM_CREATE:
{
//получаем дескриптор приложения
HINSTANCE hInstance = GetModuleHandle(0);
...
}
break;
case WM_MOUSEMOVE:
{
//устанавливаем тот или иной курсор в зависимости от местонахождения мыши
...
}
...
В svn было довольно удобно ориентироваться на последовательные номера редакций.
git describe
, в котором присутствует ближайшая метка (или выбранная метка, если делать git describe --match 'mask'
), количество коммитов после этой метки и хеш последнего коммита. Например, в одном и том же дереве linux я вижу:$ git describe
xtensa-6.8-rc2-esp32-spi-8-gb25ff15921c2
$ git describe --match 'v*'
v6.8-rc2-52-gb25ff15921c2
$ git describe --match 'v?.?'
v6.7-13495-gb25ff15921c2
считать количество русских букв, однако он не правильно это делает, что не так?
setlocale(LC_ALL, "");
const char *str = input.c_str();
while (*str) {
wchar_t c;
int n = mbtowc(&c, str, MB_CUR_MAX);
if (n < 0)
break;
if (wcschr(L"абвгд...юя", c))
++count;
str += n;
}
Компилирую gcc -o outfile source.c -lpthread. То есть собираю без всяких статиков, чтобы были зависимости к подключенным библиотекам. Далее запускаю процесс, чекаю /proc/pid/maps. Там нет ни единого упоминания к libpthread.
-lpthread
продолжали собираться, внутри пустая. Короче, ты выбрал неудачного кандидата для экспериментов. Почему в Си после main() не ставят ;?
;
между объявлением и телом функции, не только для main
, но и для любой другой функции. Согласно стандарту языка, например С99 приводит следующий синтаксис определения функции:function-definition:
declaration-specifiers declarator declaration-list<opt> compound-statement
declaration-list:
declaration
declaration-list declaration
extern int max(a, b)
int a, b;
{
return a > b ? a : b;
}
;
.эта строка работает на другом языке?