如何在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