我有一个变量
unsigned char* data = MyFunction();
如何找到数据的长度?
您必须将数据的长度从MyFunction
. 此外,请确保您知道谁分配了内存以及谁必须释放它。为此有多种模式。我经常看到:
int MyFunction(unsigned char* data, size_t* datalen)
然后,您分配数据并传入 datalen。结果(int)应该指示您的缓冲区(数据)是否足够长......
假设它是一个string
length = strlen( char* );
但它似乎不是......所以没有办法让函数返回长度。
没有办法找到 (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,
*e.g. while(*s!=0) or just simply while(*s) */
/* Return the difference of the incremented pointer and the original pointer */
}
如前所述,strlen 仅适用于以 NULL 结尾的字符串,因此第一个 0('\0' 字符)将标记字符串的结尾。你最好做这样的事情:
unsigned int size;
unsigned char* data = MyFunction(&size);
或者
unsigned char* data;
unsigned int size = MyFunction(data);
最初的问题并没有说返回的数据是以空字符结尾的字符串。如果没有,就无法知道数据有多大。如果是字符串,请使用 strlen 或自己编写。不使用 strlen 的唯一原因是如果这是一个家庭作业问题,所以我不会为你详细说明。
#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;
}
高温高压