7

我有一个变量

unsigned char* data = MyFunction();

如何找到数据的长度?

4

7 回答 7

9

您必须将数据的长度从MyFunction. 此外,请确保您知道谁分配了内存以及谁必须释放它。为此有多种模式。我经常看到:

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

然后,您分配数据并传入 datalen。结果(int)应该指示您的缓冲区(数据)是否足够长......

于 2008-11-04T10:28:44.323 回答
6

假设它是一个string

length = strlen( char* );

但它似乎不是......所以没有办法函数返回长度。

于 2008-11-04T10:24:00.340 回答
3

没有办法找到 (unsigned char *)如果它不是空终止的。

于 2010-01-07T11:26:27.260 回答
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 */
}
于 2008-11-04T10:54:40.870 回答
1

如前所述,strlen 仅适用于以 NULL 结尾的字符串,因此第一个 0('\0' 字符)将标记字符串的结尾。你最好做这样的事情:

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

或者

unsigned char* data;
unsigned int size = MyFunction(data);
于 2008-11-04T10:50:41.597 回答
1

最初的问题并没有说返回的数据是以空字符结尾的字符串。如果没有,就无法知道数据有多大。如果是字符串,请使用 strlen 或自己编写。不使用 strlen 的唯一原因是如果这是一个家庭作业问题,所以我不会为你详细说明。

于 2008-11-04T22:28:22.170 回答
-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;
}

高温高压

于 2008-11-04T13:23:07.590 回答