我有一个变量
unsigned char* data = MyFunction();
如何查找数据长度?
答案 0 :(得分:9)
您必须从MyFunction
传回数据的长度。此外,请确保您知道谁分配内存以及谁必须解除分配内存。这有各种各样的模式。我经常看到:
int MyFunction(unsigned char* data, size_t* datalen)
然后你分配数据并传入datalen。结果(int)应该表明你的缓冲区(数据)是否足够长......
答案 1 :(得分:6)
假设它是string
length = strlen( char* );
但它似乎不是......因此没有没有让函数返回长度的方式。
答案 2 :(得分:3)
如果unsigned char *)
没有空终止,则无法找到它的大小。
答案 3 :(得分:2)
现在这真的不是那么难。你有一个指向字符串第一个字符的指针。您需要递增此指针,直到到达具有空值的字符。然后你从原始指针中减去最后一个指针,瞧你有字符串长度。
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 */
}
答案 4 :(得分:1)
如前所述,strlen只能在字符串NULL中终止,因此第一个0('\ 0'字符)将标记字符串的结尾。你最好这样做:
unsigned int size;
unsigned char* data = MyFunction(&size);
或
unsigned char* data;
unsigned int size = MyFunction(data);
答案 5 :(得分:1)
原始问题并未说明返回的数据是以空字符结尾的字符串。如果没有,就无法知道数据有多大。如果它是一个字符串,请使用strlen或编写自己的字符串。不使用strlen的唯一原因是如果这是一个家庭作业问题,所以我不打算为你拼出来。
答案 6 :(得分:-5)
#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