AbstractRoutingDataSource
должен быть твоим другом. Это позволяет настроить один единственный bean-компонент в Spring ApplicationContext с помощью механизма для переключения его на один из n реальных источников данных.
Вы можете найти простой пример в этом другом SO вопросе
.
Необходимо будет пасовать назад длину данных из MyFunction
. Кроме того, удостоверьтесь, что Вы знаете, кто выделяет память и кто должен освободить ее. Существуют различные шаблоны для этого. Довольно часто я видел:
int MyFunction(unsigned char* data, size_t* datalen)
Вы затем выделяете данные и передаете datalen в. Результат (интервал) должен затем указать, был ли Ваш буфер (данные) достаточно длинен...
Принятие это - a string
length = strlen( char* );
но это, кажется, не..., таким образом, нет пути, не имея возврата функции длина.
Исходный вопрос не сказал, что возвращенные данные являются завершенной пустым указателем строкой. В противном случае нет никакого способа знать, насколько большой данные. Если это - строка, используйте strlen или запишите Ваше собственное. Единственная причина не использовать strlen состоит в том, если это - проблема домашней работы, таким образом, я не собираюсь обстоятельно объяснять его для Вас.
Теперь это действительно не настолько трудно. Вы получили указатель на первый символ к строке. Необходимо увеличить этот указатель, пока Вы не достигаете символа с нулевым значением. Вы затем substract заключительный указатель от исходного указателя и вуаля у Вас есть длина строки.
int strlen(unsigned char *string_start)
{
/* Initialize a unsigned char pointer here */
/* A loop that starts at string_start and
* is increment by one until it's value is zero,
*e.g. while(*s!=0) or just simply while(*s) */
/* Return the difference of the incremented pointer and the original pointer */
}
#include <stdio.h>
#include <limits.h>
int lengthOfU(unsigned char * str)
{
int i = 0;
while(*(str++)){
i++;
if(i == INT_MAX)
return -1;
}
return i;
}
HTH
Как сказано прежде strlen только работает в строках, ЗАВЕРШЕННЫХ ПУСТЫМ УКАЗАТЕЛЕМ, таким образом, первый 0 ('\0' символов) отметит конец строки. Вы лучше из выполнения чего-то как это:
unsigned int size;
unsigned char* data = MyFunction(&size);
или
unsigned char* data;
unsigned int size = MyFunction(data);
Невозможно найти размер (unsigned char *)
, если он не является нулевым.