Доброго дня ребята! Пишу пограмку для себя на "С" Windows32 Прожка отсылает сформированный пакет, в котором поле data = 128bit Нужно переслать строку someBigstring[] - пересылаемая строка любого размера strlen(someBigstring[]) bit Следовательно мне нужно разбить strlen(someBigstring[]) / 128 = n ... и n-раз вызвать функцию sendto() Вопрос: 1. Правильно ли я думаю- мне нужна функция, которая выглядит примерно так ... ? Код (Text): myfunc(char* someBigstring, int strlen(someBigstring[]), int frame /*(128)*/,FARPROC sendto) 2. Как на cpp пишутся рекурсивные функции под задачу типа моей? 3. МОжет эту задачу решают как-то оригинальнее? Всегда Спасибо!!!
Не понял, зачем тут рекурсия. У тебя будет функция sendto(char* someBigString, int start, int frame) и в цикле ее вызываешь, увеличивая start на frame, пока start меньше длины someBigString. Ну и на последней иттерации просто подкорректировать размер frame, если размер строки не кратен frame.
Код (C): static void send (const uint8_t* data, uint32_t size) { while (size > 128) { sendto (data, 128); data += 128; size -= 128; } sendto (data, size); }
Спасибо! --- Сообщение объединено, 10 июн 2021 --- ... просто если кому интересно Код (Text): #include <stdio.h> #include <string.h> #include <windows.h> using namespace std; void sendtopr(char* dataz, int sizez) { char* test1; test1 = (char*)malloc(256); memset(test1,00, 256); memcpy(test1, dataz, sizez); printf("%s\n", test1); free(test1); } int main(int argc, char* argv[]) { char str_in []="1234567890a1a2a3a4a5a6a7a8a9a0b1b2b3b4b5b6b7b8b900";// 50 int size_in,frame; char* wind; wind = str_in; size_in = strlen(str_in); frame = 3; while (size_in > frame) { sendtopr(wind, frame); wind += frame; size_in -= frame; } sendtopr (wind, size_in); return 0; }
Ну, выделять 256 байт на куче для данной программы не имеет смысла, проще и быстрее выделить на стеке. Да и по хорошему надо проверить, что sizez меньше 256. Но это так, просто побрюзжать.