Как найти длину неподписанного символа* в C

AbstractRoutingDataSource должен быть твоим другом. Это позволяет настроить один единственный bean-компонент в Spring ApplicationContext с помощью механизма для переключения его на один из n реальных источников данных.

Вы можете найти простой пример в этом другом SO вопросе

.

6
задан Mat 22 September 2012 в 16:09
поделиться

7 ответов

Необходимо будет пасовать назад длину данных из MyFunction. Кроме того, удостоверьтесь, что Вы знаете, кто выделяет память и кто должен освободить ее. Существуют различные шаблоны для этого. Довольно часто я видел:

int MyFunction(unsigned char* data, size_t* datalen)

Вы затем выделяете данные и передаете datalen в. Результат (интервал) должен затем указать, был ли Ваш буфер (данные) достаточно длинен...

9
ответ дан 8 December 2019 в 13:51
поделиться

Принятие это - a string

length = strlen( char* );

но это, кажется, не..., таким образом, нет пути, не имея возврата функции длина.

6
ответ дан 8 December 2019 в 13:51
поделиться

Исходный вопрос не сказал, что возвращенные данные являются завершенной пустым указателем строкой. В противном случае нет никакого способа знать, насколько большой данные. Если это - строка, используйте strlen или запишите Ваше собственное. Единственная причина не использовать strlen состоит в том, если это - проблема домашней работы, таким образом, я не собираюсь обстоятельно объяснять его для Вас.

1
ответ дан 8 December 2019 в 13:51
поделиться

Теперь это действительно не настолько трудно. Вы получили указатель на первый символ к строке. Необходимо увеличить этот указатель, пока Вы не достигаете символа с нулевым значением. Вы затем 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 */
}
2
ответ дан 8 December 2019 в 13:51
поделиться
#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

-5
ответ дан 8 December 2019 в 13:51
поделиться

Как сказано прежде strlen только работает в строках, ЗАВЕРШЕННЫХ ПУСТЫМ УКАЗАТЕЛЕМ, таким образом, первый 0 ('\0' символов) отметит конец строки. Вы лучше из выполнения чего-то как это:

unsigned int size;
unsigned char* data = MyFunction(&size);

или

unsigned char* data;
unsigned int size = MyFunction(data);
1
ответ дан 8 December 2019 в 13:51
поделиться

Невозможно найти размер (unsigned char *), если он не является нулевым.

.
3
ответ дан 8 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: