如何在C中找到unsigned char *的长度
我有一个变量
unsigned char* data = MyFunction();
如何找到数据的长度?
您必须从MyFunction
传回数据的长度。 此外,请确保您知道谁分配内存以及谁必须解除分配内存。 这有各种各样的模式。 我经常看到:
int MyFunction(unsigned char* data, size_t* datalen)
然后你分配数据并传入datalen。结果(int)应该表明你的缓冲区(数据)是否足够长……
假设它是一个string
length = strlen( char* );
但它似乎不是……因此没有办法让函数返回长度。
如果它没有以null结尾,则无法找到( unsigned char *)
的大小。
现在这真的不是那么难。 你有一个指向字符串第一个字符的指针。 您需要递增此指针,直到到达具有空值的字符。 然后你从原始指针中减去最后一个指针,瞧你有字符串长度。
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, *eg while(*s!=0) or just simply while(*s) */ /* Return the difference of the incremented pointer and the original pointer */ }
原始问题并未说明返回的数据是以空字符结尾的字符串。 如果没有,就无法知道数据有多大。 如果它是一个字符串,请使用strlen或编写自己的字符串。 不使用strlen的唯一原因是如果这是一个家庭作业问题,所以我不打算为你拼出来。
如前所述strlen只能在字符串中以NULL结尾,因此第一个0(’\ 0’字符)将标记字符串的结尾。 你最好做这样的事情:
unsigned int size; unsigned char* data = MyFunction(&size);
要么
unsigned char* data; unsigned int size = MyFunction(data);
#include #include int lengthOfU(unsigned char * str) { int i = 0; while(*(str++)){ i++; if(i == INT_MAX) return -1; } return i; }
HTH